diff --git a/fineract-doc/src/docs/en/chapters/features/working-capital-amortization-schedule.adoc b/fineract-doc/src/docs/en/chapters/features/working-capital-amortization-schedule.adoc index c22bfa1f5b5..2816d3ae06e 100644 --- a/fineract-doc/src/docs/en/chapters/features/working-capital-amortization-schedule.adoc +++ b/fineract-doc/src/docs/en/chapters/features/working-capital-amortization-schedule.adoc @@ -233,7 +233,7 @@ At disbursement, the origination fee becomes the initial *deferred balance* (unr * `unrealizedIncomeFromDiscountFee` = `totalDiscountFee - realizedIncomeFromDiscountFee` * `realizedIncomeFromDiscountFee` = 0 (nothing recognized yet) -As repayments are received, the cursor-based amortization mechanism determines how much discount fee income is eligible to move from `unrealizedIncomeFromDiscountFee` to `realizedIncomeFromDiscountFee`. +As repayments are received, the fee earned on the money collected determines how much discount fee income is eligible to move from `unrealizedIncomeFromDiscountFee` to `realizedIncomeFromDiscountFee`. == Lifecycle @@ -244,7 +244,7 @@ As repayments are received, the cursor-based amortization mechanism determines h | *Approve* | Generates a projected schedule from approved loan parameters and expected disbursement date. | *Disburse* | Regenerates the schedule using the actual disbursement amount and actual disbursement date. | *Repayment* | `applyPayment()` records the repayment against the calculated schedule date and rebuilds the schedule. Calculates actual amortization and income modification for applied payment rows. -| *Period Payment Rate Change* | Adds a rate segment from the change's effective date and rebuilds the schedule using the new period payment rate for the remaining term. The effective date may be in the future, in which case the schedule carries the new segment immediately while the rate stored on the loan is switched over by the `WC_PERIOD_PAYMENT_RATE_EFFECTIVE_DATE` COB step once that date arrives. +| *Period Payment Rate Change* | Records the change's effective date and rate, and rebuilds; the walk switches to the new rate on the day it reaches that date, re-solving from the balance and unearned fee it is carrying. The effective date may be in the future, in which case the schedule carries the change immediately while the rate stored on the loan is switched over by the `WC_PERIOD_PAYMENT_RATE_EFFECTIVE_DATE` COB step once that date arrives. A date past the end of the schedule takes effect on its last day; a date at or before the first instalment takes effect on the first day, so two changes a day apart either side of it can land on the same day — the one booked later governs it. |=== === State Transitions @@ -313,15 +313,22 @@ The amortization schedule model is calculated from these loan-level parameters: == Formulas ---- -expectedPaymentAmount = (TPV × periodPaymentRate / 100) / npvDayCount -originalPaymentNumber = roundUp((netDisbursement + discountFee) / expectedPayment) -EIR = RATE(originalPaymentNumber, -expectedPayment, netDisbursement) -paymentsLeft = max(0, segmentRelativePaymentNo - appliedPaymentCount) +expectedPaymentAmount = round((TPV × periodPaymentRate / 100) / npvDayCount) // floored at one minor unit when positive +grossPayable = netDisbursement + discountFee +originalPaymentNumber = roundUp(grossPayable / expectedPaymentAmount) +finalPaymentAmount = grossPayable - expectedPaymentAmount × (originalPaymentNumber - 1) +EIR = IRR([-netDisbursement, expectedPaymentAmount × (n-1), finalPaymentAmount]) +paymentsLeft = max(0, dayWithinCurrentRate - appliedPaymentCount) discountFactor = 1 / (1 + EIR) ^ paymentsLeft -npvSource = actualPayment (if applied) or forecastPayment (if not) -npvValue = max(0, npvSource × discountFactor) // row 0: -netDisbursementAmount (unclamped) +npvSource = actualPayment (if paid) or 0 (if the day elapsed unpaid) or billedInstalment +npvValue = max(0, npvSource × discountFactor) // row 0: -netDisbursementAmount (unclamped) ---- +The rate is solved against the cash flow the borrower actually pays, closing remainder +included, rather than against a uniform annuity. That is what makes the recursion below +close on exactly zero on the last day, with its daily accruals summing to exactly the +discount fee — the property the whole schedule rests on. + === Stored Values at Loan Account Level After EIR calculation, the following values are persisted: @@ -347,15 +354,15 @@ For each actual repayment transaction: | `paymentNo` | 1-based. Row 0 = disbursement. | `paymentDate` | `expectedDisbursementDate + paymentNo` days. -| `expectedPaymentAmount` | Constant daily expected payment. Row 0: `-netDisbursementAmount`. Tail rows: null. -| `discountFactor` | `1/(1+EIR)^paymentsLeft`. Row 0 and paid periods: 1.0. -| `npvValue` | `max(0, npvSource × DF)`. Row 0: `-netDisbursementAmount`. -| `balance` | `balance[i-1]×(1+EIR) - expectedPayment`. Row 0: `+netDisbursementAmount`. Tail: null. -| `expectedAmortizationAmount` | `min(balance[i] + expectedPayment - balance[i-1], discountFee)`. Row 0 and tail rows: null. +| `expectedPaymentAmount` | The daily instalment in force, capped at the balance the day has to close. Row 0: `-netDisbursementAmount`. +| `discountFactor` | `1/(1+EIR)^paymentsLeft`. Row 0 and paid periods: 1.0. Model only — not returned by the API. +| `npvValue` | `max(0, npvSource × DF)`. Row 0: `-netDisbursementAmount`. Model only — not returned by the API. +| `balance` | `balance[i-1]×(1+EIR) - billedInstalment[i]`. Row 0: `+netDisbursementAmount`. Serialized as `expectedBalance`. +| `expectedAmortizationAmount` | `round(aggregateAccrual[i]) - round(aggregateAccrual[i-1])`, where the accrual is `balance[i-1] × EIR`. Row 0: null. | `actualPaymentAmount` | Actual cash paid. Null if no payment. -| `actualAmortizationAmount` | Cursor-based: `actualPayment/expectedPayment` periods of expected amortization consumed. Null if no payment. -| `incomeModification` | Applied positive-payment rows: `actualAmort - expectedAmort`. Zero-amount or unpaid rows: null. Row 0 and tail rows: null. -| `deferredBalance` | `discountFee - cumulativeActualAmort`. Row 0: `discountFeeAmount`. Tail rows: null. +| `actualAmortizationAmount` | `round(feeEarned[i]) - round(feeEarned[i-1])`, where `feeEarned` is the plan curve read at the money collected. Null for a day with no record; zero for a day that elapsed unpaid. +| `incomeModification` | Positive-payment rows: `actualAmort - expectedAmort`. Otherwise null. Model only — not returned by the API. +| `deferredBalance` | `discountFee - round(aggregateAccrual[i])`, closing on exactly 0. Row 0: `discountFeeAmount`. Serialized as `expectedDiscountFeeBalance`; the actual-driven counterpart is `actualDiscountFeeBalance`. |=== === Disbursement Row (paymentNo = 0) @@ -370,27 +377,31 @@ For each actual repayment transaction: | all other nullable fields | null |=== -=== Tail Periods +=== Days Past the Term -Appended when shortfall remains after the effective term. Each tail row internally forecasts `min(remainingShortfall, expectedPayment)`. In the public schedule response, tail rows expose `paymentNo`, `paymentDate`, `discountFactor`, and `npvValue`; amount, balance, amortization, and deferred-balance fields are null. Trailing rows with zero forecast are trimmed. +There are none, in the sense of a separate kind of row. The walk runs until the loan is +square, so a borrower who has fallen behind simply gets more days — same instalment, +balance still declining, fee still being earned — and one who has paid ahead gets fewer. +A day past the original term is an ordinary day of the schedule and fills in the same +columns as any other. == EIR-Based Income Recognition -=== Cursor-Based Actual Amortization - -When a repayment is received, the system calculates how much origination fee income to recognize using a *cursor-based* approach: +=== Fee Earned Is a Function of Money Collected -. The cursor tracks how many "periods worth" of expected amortization have been consumed -. For each payment: `periodsConsumed = actualPaymentAmount / expectedPaymentAmount` -. The cursor advances by this amount, consuming the corresponding expected amortization amounts -. Partial periods are interpolated +The discount fee is accrued at disbursement as deferred revenue and amortized as the money +comes in, so what governs recognition is how much has been collected, never how much time +has passed. The fee recognized is read off the plan's own declining-balance recursion at +the point the money collected has reached — the plan cursor described in the Calculation +Algorithm above. This mechanism means: -* A payment equal to the expected amount recognizes exactly one period's expected amortization -* A payment larger than expected (excess) recognizes proportionally more income -* A payment smaller than expected recognizes proportionally less income -* No payment on a given day means no income is recognized for that day +* A payment equal to the instalment recognizes exactly one day's worth of fee +* A payment larger than the instalment recognizes proportionally more, and takes a day off the end of the schedule — that day was already covered +* A payment smaller than the instalment recognizes proportionally less +* No payment on a given day means no income is recognized for that day, and the schedule runs a day longer +* Repaying the whole payable recognizes the whole fee, however few days it took; paying more than the payable recognizes nothing further, because there is nothing left to earn === Income Modification @@ -411,18 +422,25 @@ The deferred balance represents the remaining unrecognized origination fee: == Calculation Algorithm -. *Balances & expected amortizations*: `balance[i] = balance[i-1]×(1+EIR) - expectedPayment`. Expected amort capped at `discountFee`. -. *Aggregate payments by date* (same-date payments summed). Repayments are normalized to a valid schedule date. -. *Shortfall/excess analysis*: compare each applied payment to expected. -. *Cursor-based actual amortization*: cursor advances by `actualPayment/expectedPayment` periods; interpolates partial periods. -. *Excess distribution*: reduces forecast payments backward from last period. -. *Tail periods*: appended for remaining shortfall. -. *Total net amortization*: `-netDisbursement + Σ(npvSource[i] × DF[i]) + tailNpv`. -. *Assemble rows*, trim trailing zero-forecast. +One forward walk over the days, carrying two cursors. The *calendar cursor* takes one step +per day; the *plan cursor* takes one step per instalment of the plan as written, and runs +ahead of the calendar exactly as far as the borrower has paid ahead. + +Per day: + +. *Aggregate payments by date* (same-date payments summed, repayments normalized to a valid schedule date). Every elapsed date with nothing against it is seeded with a nil payment, so a missed instalment is recorded rather than absent. +. *Accrue and bill*: `grown = balance[n-1] × (1 + EIR)`, `billedInstalment[n] = min(expectedPaymentAmount, grown)`, `balance[n] = grown - billedInstalment[n]`. No day can bill more than the balance it has to close, and that cap is also what closes the loan: on the day the balance falls below an instalment the day bills the balance, and nothing is left. There is no separate closing amount — `finalPaymentAmount` sizes the cash flow the rate is solved from and is reported as the contractual final instalment, but the schedule bills what is owed, which is the same figure on a loan paid to plan and the right one on a loan a repayment has restated. +. *Advance the plan cursor* until it has billed at least as much as has been collected, then read back to the amount collected within the step it landed in. That reading is the fee the money received has earned — recognition follows money in, not time passed, so paying the whole payable on day one earns the whole fee on day one. +. *Normalize both tracks*: `aggNorm[n] = round(aggHp[n])`, and the day reports `aggNorm[n] - aggNorm[n-1]`. The running total is rounded, never the day, which is what stops the fee drifting from itself over a few hundred days. +. *Restate from reality* on a settled day — one that was paid, or that elapsed unpaid: the balance carried forward becomes what the borrower really owes, and the expected fee total is re-seeded from the actual one. Days that have not come round yet keep the plan they were written with. +. *Stop* once the balance has closed and the schedule has caught up with the date it is being calculated to — and never before today, or before any day a principal adjustment falls on, since a payment or a rate change dated there needs a row to land on. Stop early only if the instalment cannot cover the day's accrual, because then no number of further days would close the balance. === Rebuild Flow -Every schedule-changing operation triggers a full rebuild: aggregate payments -> build payment list (1 to effective term, actual or null) -> balances -> payment analysis -> cursor amortizations -> excess distribution -> tail -> net amortization -> assemble rows -> trim. +Every schedule-changing operation triggers a full rebuild, and the rebuild is the walk: +aggregate payments -> walk the days -> map each day to a row -> overlay principal +adjustments. Nothing is settled onto a final period afterwards, and nothing is trimmed off +the end: the schedule ends where the loan closes. == Loan Balance @@ -448,7 +466,7 @@ The `m_wc_loan_balance` table maintains a running balance snapshot for each loan | Penalty amount, cumulative penalty paid, and derived outstanding penalty amount. | `realizedIncomeFromDiscountFee` -| Discount fee income that has been recognized (amortized). Increases as repayments trigger cursor-based amortization and COB posts discount fee amortization. +| Discount fee income that has been recognized (amortized). Increases as repayments earn fee off the plan curve and COB posts discount fee amortization. | `unrealizedIncomeFromDiscountFee` | Derived as `totalDiscountFee - realizedIncomeFromDiscountFee`. @@ -573,8 +591,7 @@ When actual payment exceeds expected payment for a period: When actual payment is less than expected: * Less income is recognized for the period -* Tail periods are appended to the schedule for the remaining shortfall -* Each tail period forecasts `min(remainingShortfall, expectedPayment)` +* The schedule runs longer: the balance the day left standing still has to be closed, so the walk keeps producing days until it is === No Payment @@ -764,7 +781,7 @@ In the example above: * The discount fee of 1000.00 starts as the full `deferredBalance` * `expectedAmortizationAmount` starts at 9.61 on day 1 and *decreases daily* (9.57 on day 2), demonstrating the EIR front-loading effect * With no actual payments, `actualAmortizationAmount` and `incomeModification` are null -* The `balance` decreases daily from 9000.00 toward 0.00 over the 200-day term +* The `balance` decreases daily from 9000.00 to exactly 0.00 over the 200-day term, and `deferredBalance` reaches exactly 0.00 with it ==== == Business Events @@ -828,7 +845,7 @@ Working Capital loans support the following transaction types: | Initial funding of the loan. Triggers amortization schedule generation and deferred income initialization. | *Repayment* -| Merchant payment applied to the loan. Triggers cursor-based amortization and schedule rebuild. Payment allocation follows the product's `paymentAllocation` rules. +| Merchant payment applied to the loan. Earns fee off the plan curve and triggers a schedule rebuild. Payment allocation follows the product's `paymentAllocation` rules. | *Discount Fee* | Sets the discount fee as a transaction related to the disbursement. diff --git a/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation-accounting.adoc b/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation-accounting.adoc index d573f4324aa..c11670146bc 100644 --- a/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation-accounting.adoc +++ b/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation-accounting.adoc @@ -4,7 +4,7 @@ Working Capital Loans amortize discount fee income across the loan term using an Effective Interest Rate (EIR) schedule. When the COB business step `WC_DISCOUNT_FEE_AMORTIZATION` advances the realized income figure, the accounting processor posts a balanced pair of journal entries that move the newly recognized amount out of the *Deferred Income Liability* placeholder and into income (or, when the loan is charged off, into the charge-off expense placeholder). -The EIR calculation itself — solver, schedule shape, rate segments — is documented in `working-capital-eir-calculation.adoc`. This document focuses on the journal entries derived from the schedule. +The EIR calculation itself — solver, schedule shape, rate changes — is documented in `working-capital-eir-calculation.adoc`. This document focuses on the journal entries derived from the schedule. === Purpose diff --git a/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation.adoc b/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation.adoc index b2c52f1e5df..3d38fafa227 100644 --- a/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation.adoc +++ b/fineract-doc/src/docs/en/chapters/features/working-capital-eir-calculation.adoc @@ -2,7 +2,7 @@ == Overview -Working Capital Loans with `amortizationType = EIR` derive an Effective Interest Rate (EIR) from the contractual payment structure using a Newton-Raphson solver and project a full amortization schedule with per-payment discount factors, NPV values, and deferred income tracking. The schedule is serialized to JSON and persisted in `m_wc_loan_amortization_model` for efficient reads. Mid-lifecycle rate changes add a `RateSegment` covering only the remaining term, preserving historical payment data while recalculating future payments under the new EIR. +Working Capital Loans with `amortizationType = EIR` derive an Effective Interest Rate (EIR) from the contractual payment structure using a Newton-Raphson solver and project a full amortization schedule with per-payment discount factors, NPV values, and deferred income tracking. The schedule is serialized to JSON and persisted in `m_wc_loan_amortization_model` for efficient reads. Mid-lifecycle rate changes are recorded as an effective date and a rate; the schedule re-solves from the balance and unearned fee it is carrying on that day, preserving historical payment data while recalculating future payments under the new EIR. === Purpose @@ -17,7 +17,7 @@ The scope of this document includes: * Payment and balance recurrence formulas * Discount factor and NPV computation per payment * Amortization model persistence and versioning -* Mid-lifecycle rate changes and rate segments +* Mid-lifecycle rate changes * Projected amortization schedule API * Rate change management API @@ -29,7 +29,7 @@ The scope of this document includes: === Definitions and Key Concepts -*Effective Interest Rate (EIR):* The periodic interest rate that equates the present value of all projected payments to the net disbursement amount. Computed via Newton-Raphson, equivalent to Excel's `RATE(nper, pmt, pv)`. +*Effective Interest Rate (EIR):* The periodic interest rate that equates the present value of all projected payments to the net disbursement amount. Solved by Newton-Raphson over the payment series itself, equivalent to Excel's `IRR(values)` rather than its `RATE(nper, pmt, pv)`: the closing day pays a smaller remainder than the days before it, so the series is not a uniform annuity and solving it as one would not close the balance on nothing. *Net Disbursement Amount:* Principal disbursed after deducting any upfront discount fee: `netDisbursement = totalLoanAmount − discountFeeAmount`. @@ -39,23 +39,32 @@ The scope of this document includes: *Original Payment Number:* `ceil((netDisbursementAmount + discountFeeAmount) / expectedPayment)` — the total number of payment periods. -*Discount Factor:* `1 / (1 + EIR)^paymentsLeft` — the time-value multiplier applied to a future payment. +*Discount Factor:* `1 / (1 + EIR)^paymentsLeft` — the time-value multiplier applied to a future payment. Held in the model, not returned by the API. -*NPV Value:* The present value of a scheduled payment: `npvValue = forecastPayment × discountFactor`. +*NPV Value:* The present value of a scheduled payment: `npvValue = npvSource × discountFactor`. Held in the model, not returned by the API. *Amortization Amount:* The portion of each payment that reduces the outstanding deferred income (`deferredBalance`). -*Deferred Balance:* Unrecognized discount fee income remaining at each period: starts at `discountFeeAmount`, decreases monotonically to zero. +*Deferred Balance:* Unrecognized discount fee income remaining at each period: starts at `discountFeeAmount` and closes on exactly zero. The projected figure falls for as long as the rate it is projected at stands still - it is a one-day-ahead projection, so a rate cut deducts a smaller day's accrual from the same balance and reports more still deferred on the day it takes effect. What the money received has really earned is `actualDiscountFeeBalance`, which is a ledger and only ever falls. -*Rate Segment:* A contiguous block of periods sharing the same EIR and expected payment amount. Created when a rate change modifies payment terms mid-lifecycle. +*Rate Segment:* The run of days one rate governs - from the day a change takes effect until the next one does. Nothing stores it: a rate change records only its effective date and rate, and the walk switches rate when it reaches that date, so a segment describes what comes out rather than an entity that is kept. == Design Decisions and Considerations === Newton-Raphson Solver for EIR -The EIR is solved via `TvmFunctions.rate(nper, pmt, pv, mc)` which finds `r` satisfying: +The EIR is solved via `TvmFunctions.irr(cashFlows, mc)`, which finds `r` satisfying: -`pv × (1+r)^n + pmt × ((1+r)^n − 1) / r = 0` +`Σ cf[k] / (1+r)^k = 0` for `k = 0 .. n` + +where `cf[0]` is the negated balance being solved from, `cf[1..n-1]` are the daily payments +and `cf[n]` is the closing remainder. + +The series is solved as it stands rather than as a uniform annuity. The closing day pays only +what is left of the gross payable after the full daily payments, which is smaller than a daily +payment whenever the two do not divide evenly — and it is solving against that exact series +that makes the recurrence close on exactly zero on its last day, with the daily accruals +summing to exactly the discount fee. An annuity solve would leave both a little out. Key solver parameters: @@ -65,15 +74,15 @@ Key solver parameters: The initial guess takes the absolute value of the linear approximation to avoid catastrophic divergence when `nper` is large (e.g., daily-payment loans with thousands of periods), where a fixed default of 0.01 would cause `(1.01)^nper` to overflow the `MathContext`. -=== Mid-Lifecycle Rate Segments +=== Mid-Lifecycle Rate Changes -Rather than rebuilding the entire schedule on a rate change, the model appends a `RateSegment` covering only the remaining term from the change date forward. Each segment stores: `startDayIndex`, `expectedPaymentAmount`, `segmentTerm`, `effectiveInterestRate`, `netDisbursementAtSplit`, and `discountAtSplit`. Historical actuals before the split point are preserved; only future payments are recalculated. +A rate change stores only what it was booked with: an `effectiveDate` and a `periodPaymentRate`. Everything the new rate needs — the balance still outstanding and the fee not yet earned against it — is what the schedule walk is already carrying when it reaches that day, so the figure a change is sized against and the figure the schedule is showing cannot disagree. Historical actuals before the effective date are preserved; only the days from it forward are recalculated. -When a new rate change is applied, any existing segment at or after the split point is removed first, making rate changes idempotent on the same date. +A change already recorded on the same effective date is replaced, making rate changes idempotent on a date. Changes can only be appended, though: a date preceding a change already recorded is rejected, because each change is sized against the balance and unearned fee reached on its own day and an earlier one moves both for every change after it. A backdated change is applied by replaying the whole history in effective-date order onto a fresh model, which is what `regenerateAmortizationScheduleOnRateChange` does. === Amortization Model Persistence -The full `ProjectedAmortizationScheduleModel` is serialized to JSON (version `"4"` as of this writing) and stored in `m_wc_loan_amortization_model` (one row per loan, uniquely constrained on `loan_id`). This avoids recomputing the schedule from scratch on every read while still supporting incremental updates via rate segments. Optimistic locking via the `version` column prevents concurrent overwrites. +The full `ProjectedAmortizationScheduleModel` is serialized to JSON (version `"7"` as of this writing) and stored in `m_wc_loan_amortization_model` (one row per loan, uniquely constrained on `loan_id`). This avoids recomputing the schedule from scratch on every read while still supporting incremental updates as payments and rate changes are recorded. Optimistic locking via the `version` column prevents concurrent overwrites. === Payment Date Normalization @@ -93,7 +102,7 @@ The amortization model is persisted as a JSON snapshot in `m_wc_loan_amortizatio === Table: m_wc_loan_amortization_model -The `m_wc_loan_amortization_model` table persists the serialized amortization model for each loan. One row per loan; updated in place when rate segments are added or payments are applied. +The `m_wc_loan_amortization_model` table persists the serialized amortization model for each loan. One row per loan; updated in place when a rate change or a payment is recorded. [cols="1,2,1,3",options="header"] |=== @@ -168,7 +177,7 @@ Required GL account mappings when `accounting_type` is not `NONE`: ==== Retrieve Projected Amortization Schedule -Returns the full projected amortization schedule for a Working Capital Loan, including EIR, per-payment discount factors, NPV values, balances, amortization amounts, and deferred balance. +Returns the full projected amortization schedule for a Working Capital Loan: the loan's EIR, and per day the amount billed, both balances, both amortization amounts, and both deferred fee balances. The discount factor, NPV value, payments-left count and income modification are carried inside the model for the calculation but are not part of the response. [source] ---- @@ -194,14 +203,13 @@ GET /v1/working-capital-loans/{loanId}/amortization-schedule "paymentNo": 1, "paymentDate": "2024-01-16", "expectedPaymentAmount": 291.67, - "discountFactor": 0.999705, - "npvValue": 291.58, - "balance": 94709.00, + "expectedBalance": 94709.00, "expectedAmortizationAmount": 13.89, + "expectedDiscountFeeBalance": 4986.11, "actualPaymentAmount": null, + "actualBalance": null, "actualAmortizationAmount": null, - "incomeModification": null, - "deferredBalance": 5000.00 + "actualDiscountFeeBalance": null } ] } @@ -209,12 +217,12 @@ GET /v1/working-capital-loans/{loanId}/amortization-schedule [NOTE] ==== -Payment row 0 (disbursement) is also included in the `payments` array with a negative `expectedPaymentAmount` equal to the net disbursement. `actualPaymentAmount`, `actualAmortizationAmount`, and `incomeModification` are `null` for unpaid periods. +Payment row 0 (disbursement) is also included in the `payments` array with a negative `expectedPaymentAmount` equal to the net disbursement. The four actual columns are `null` for a day that carries no record at all; a day that elapsed with nothing paid reports nil rather than `null`, because a missed instalment is a fact about the loan. ==== ==== Update Period Payment Rate -Modifies the `periodPaymentRate` for an active Working Capital Loan. The operation reverses any existing active rate change, records a new `m_wc_loan_period_payment_rate_change` entry, and triggers recalculation of the amortization schedule from the rate change date forward via a new `RateSegment`. +Modifies the `periodPaymentRate` for an active Working Capital Loan. The operation reverses any existing active rate change, records a new `m_wc_loan_period_payment_rate_change` entry, and triggers recalculation of the amortization schedule from the rate change date forward. [source] ---- @@ -278,31 +286,31 @@ GET /v1/working-capital-loans/external-id/{loanExternalId}/rate-changes * `expectedPayment = (totalPaymentVolume × periodPaymentRate / 100) / npvDayCount` * `originalPaymentNumber = ceil((netDisbursementAmount + discountFeeAmount) / expectedPayment)` -* `EIR = TvmFunctions.rate(originalPaymentNumber, −expectedPayment, netDisbursementAmount)` +* `finalPayment = (netDisbursementAmount + discountFeeAmount) − expectedPayment × (originalPaymentNumber − 1)` +* `EIR = TvmFunctions.irr([−netDisbursementAmount, expectedPayment × (originalPaymentNumber − 1), finalPayment])` * The Newton-Raphson solver converges to a tolerance of `1E-12` with a maximum of 500 iterations. * Product validation currently rejects non-EIR amortization types. * `netDisbursementAmount` must be positive; `npvDayCount` must be positive. === Balance and Discount Factor Recurrence -For each payment period `i` (1-based): +For each day `i` (1-based): -* `balance[i] = balance[i−1] × (1 + EIR) − expectedPayment` +* `balance[i] = balance[i−1] × (1 + EIR) − billedInstalment[i]`, where `billedInstalment[i]` is the instalment in force capped at the balance it has to close * `discountFactor[i] = 1 / (1 + EIR)^paymentsLeft[i]` -* `npvValue[i] = forecastPayment[i] × discountFactor[i]` -* `expectedAmortizationAmount[i] = balance[i] + expectedPayment − balance[i−1]` (equivalent to `balance[i−1] × EIR`) -* `deferredBalance` decreases monotonically from `discountFeeAmount` to 0 over the loan term. +* `npvValue[i] = npvSource[i] × discountFactor[i]` +* the day's high-precision accrual is `balance[i−1] × EIR`, and what it *reports* is `round(aggregateAccrual[i]) − round(aggregateAccrual[i−1])` — the running total is rounded, not the day +* `deferredBalance[i] = discountFee − round(aggregateAccrual[i])`, closing on exactly 0 and never drifting more than half a minor unit from the exact figure it shadows. It falls for as long as one rate governs the days it is projected at; the day a rate cut takes effect reports more still deferred than the day before, because the same balance is being projected one day forward at a smaller accrual -=== Rate Segments +=== Rate Changes -* A rate change at date `D` resolves to `splitDayIndex = days(disbursementDate, D)`. -* The balance at the split is derived from the base schedule recurrence up to `splitDayIndex − 1`. -* The new expected payment for the segment: `newPayment = (TPV × newPeriodPaymentRate / 100) / npvDayCount`. -* The new segment term: `floor((balanceAtSplit + discountAtSplit) / newPayment)`. -* The new EIR: `TvmFunctions.rate(segmentTerm, −newPayment, balanceAtSplit)`. -* The `RateSegment` stores: `startDayIndex`, `expectedPaymentAmount`, `segmentTerm`, `effectiveInterestRate`, `netDisbursementAtSplit`, `discountAtSplit`. -* All payments before `startDayIndex` retain their original EIR-based values. -* Any existing segment at or after `splitDayIndex` is removed before adding the new one (idempotent overwrite). +* A `RateChange` stores only what it was booked with: `effectiveDate` and `periodPaymentRate`. Everything else is derived by the walk when it reaches that day, so the balance a change is sized against and the balance the schedule is showing cannot disagree. +* On the effective day the walk holds `balanceAtSplit` (reality where it is known) and `unearnedFee = discountFee − feeEarnedSoFar`, and re-solves the sub-schedule from them exactly as the original was solved: `newPayment = round((TPV × newPeriodPaymentRate / 100) / npvDayCount)`, `term = roundUp((balanceAtSplit + unearnedFee) / newPayment)`, and the EIR as the IRR of that cash flow. +* The plan cursor is repositioned onto the same reality, so fee already earned under the old rate stays earned — a rate change re-prices what is still to come, it does not reach backwards. +* Days before the effective date keep every figure they had. +* A change already recorded on the same effective date is replaced, so booking twice on one day overwrites rather than leaving the day with two rates. A date that precedes a change already recorded is rejected rather than dropping the later ones: `applyRateChange` appends, and a backdated change is applied by replaying the history in order onto a fresh model. +* A change dated at or past the day the schedule currently runs to takes effect on that day; a change against an already-square loan is rejected. +* Several changes compose without any extra machinery: each one re-bases both cursors and the walk carries on. === Rate Change Reversal @@ -316,7 +324,7 @@ The `ProjectedAmortizationScheduleModel` progresses through four operations: . `generate()` — creates the initial schedule when the loan reaches approval/disbursement processing with the resolved product and loan parameters. . `regenerate()` — recalculates with updated amounts at approval or disbursement, preserving already applied payments. . `applyPayment()` — records a payment and rebuilds the payment list using the payment-date mapping rules described above. -. `applyRateChange()` — adds a `RateSegment` and rebuilds the payment list from `startDayIndex` forward. +. `applyRateChange()` — records the effective date and the new rate, and rebuilds. The walk switches rate on that day and re-solves from the balance and unearned fee it is carrying. == Example Scenarios @@ -327,13 +335,13 @@ The `ProjectedAmortizationScheduleModel` progresses through four operations: * `periodPaymentRate = 27.77`, `npvDayCount = 360`, `totalPaymentVolume = 105,000` **Action:** -The system computes `expectedPayment = (105,000 × 27 / 100) / 360 ≈ 291.67` and `originalPaymentNumber = ceil(100,000 / 291.67) = 343`. EIR is solved via Newton-Raphson: `EIR = RATE(343, −291.67, 95,000)`. The schedule is stored in `m_wc_loan_amortization_model` with one row per day (343 payment rows plus the disbursement row). +The system computes `expectedPayment = (105,000 × 27 / 100) / 360 ≈ 291.67` and `originalPaymentNumber = ceil(100,000 / 291.67) = 343`. EIR is solved via Newton-Raphson as the IRR of `[−95,000, 291.67 × 342, finalPayment]`, where `finalPayment` is the remainder of the gross payable after those 342 full payments. The schedule is stored in `m_wc_loan_amortization_model` with one row per day (343 payment rows plus the disbursement row). **Expected Behavior:** * `effectiveInterestRate` is returned in the amortization schedule API response. -* Each `payments[]` entry includes `discountFactor`, `npvValue`, `expectedAmortizationAmount`, and `deferredBalance`. -* `deferredBalance` decreases from 5,000 to 0 over the 344 periods. +* Each `payments[]` entry includes `expectedPaymentAmount`, `expectedBalance`, `expectedAmortizationAmount`, and `expectedDiscountFeeBalance`. +* `expectedDiscountFeeBalance` decreases from 5,000 to exactly 0 over the 344 days. * First payment date is `disbursementDate + 1 day`. === Scenario #2: Mid-Lifecycle Rate Change @@ -344,7 +352,7 @@ The system computes `expectedPayment = (105,000 × 27 / 100) / 360 ≈ 291.67` a * New `periodPaymentRate = 30`. **Action:** -`applyRateChange()` is called with `newPeriodPaymentRate = 30` and `rateChangeDate = businessDate`. `splitDayIndex = 145`. `newPayment = (105,000 × 30 / 100) / 360 = 350.00`. `newDiscount = remainingTotal − balanceAtSplit`. `segmentTerm = floor((60,000 + newDiscount) / 350)`. `EIR_new = RATE(segmentTerm, −350.00, 60,000)`. A `RateSegment` with `startDayIndex = 145` is appended. The prior active `m_wc_loan_period_payment_rate_change` entry is reversed and a new one is saved. +`applyRateChange()` is called with `newPeriodPaymentRate = 30` and `rateChangeDate = businessDate`, which falls on day 145. `newPayment = round((105,000 × 30 / 100) / 360) = 350.00`. `balanceAtSplit = 60,000` and `unearnedFee = discountFee − feeEarnedSoFar`, both read off the walk. `term = roundUp((60,000 + unearnedFee) / 350)`, and `EIR_new` is the IRR of that cash flow. The prior active `m_wc_loan_period_payment_rate_change` entry is reversed and a new one is saved. **Expected Behavior:** @@ -359,5 +367,5 @@ Working Capital Loan EIR calculation provides time-value-of-money-based income r * EIR is solved numerically using Newton-Raphson from `totalPaymentVolume`, `periodPaymentRate`, `npvDayCount`, and `discountFeeAmount`. * The full amortization schedule is serialized to JSON in `m_wc_loan_amortization_model` for efficient retrieval without recomputation. * Each scheduled payment carries a `discountFactor` and `npvValue`, enabling present-value-based income recognition through the `deferredBalance` amortization mechanism. -* Mid-lifecycle rate changes are handled via `RateSegment` splits, preserving historical actuals while recalculating only future payments with the new EIR. +* Mid-lifecycle rate changes are recorded as a date and a rate, and re-solved during the walk from the balance and unearned fee reached on that day, preserving historical actuals while recalculating only future payments with the new EIR. * Rate change history is maintained in `m_wc_loan_period_payment_rate_change` with full reversal support. diff --git a/fineract-doc/src/docs/en/chapters/features/working-capital-planned-projected-balances-eir.adoc b/fineract-doc/src/docs/en/chapters/features/working-capital-planned-projected-balances-eir.adoc index 09dfdaf1a07..bcb867bf0ff 100644 --- a/fineract-doc/src/docs/en/chapters/features/working-capital-planned-projected-balances-eir.adoc +++ b/fineract-doc/src/docs/en/chapters/features/working-capital-planned-projected-balances-eir.adoc @@ -30,15 +30,15 @@ The scope of this document includes: === Definitions and Key Concepts -*Planned Balance (`expectedBalance`):* Running outstanding principal balance assuming all expected payments are made on time. Computed for every period whether or not a payment was received. Decreases monotonically from `netDisbursementAmount` to zero over the contracted term. Formerly serialized as `balance` in JSON model versions prior to `"4"`. +*Planned Balance (`expectedBalance`):* Outstanding principal projected one day forward from what the borrower owes, restated from reality on any day already settled. Computed for every period whether or not a payment was received, and closes on zero. A projection rather than a ledger, so it does not simply run down: on a day that elapsed unpaid it holds, and on the day a rate cut takes effect it can report a higher figure than the day before, because a smaller instalment is deducted from the same balance. What is really owed is `actualBalance`, which only ever falls. Formerly serialized as `balance` in earlier JSON model versions. -*Projected Balance (`actualBalance`):* Running outstanding principal balance based on actual cash payments received. Populated only for periods where a positive payment exists or where `calculatedTillDate` has been reached; `null` for future unpaid periods. Deviates from the planned balance when actual payments differ from expected. +*Projected Balance (`actualBalance`):* Running outstanding principal balance based on actual cash payments received. Populated only for days where a payment exists or where `calculatedTillDate` has been reached; `null` for future days nothing is known about. Deviates from the planned balance when actual payments differ from expected. Never below nothing: a borrower who has handed over more than the payable owes nothing at all, and the excess is held as the loan's `overpayment_amount` rather than as a negative balance - the loan clamps every outstanding bucket the same way, so the schedule must not contradict it. -*Planned Discount Fee Balance (`expectedDiscountFeeBalance`):* Remaining unrecognized discount fee income based on expected amortizations: `discountFee − Σ(expectedAmortizationAmount[1..i])`. Decreases monotonically from `discountFeeAmount` at disbursement to zero at the contracted end of term. Formerly serialized as `deferredBalance`. +*Planned Discount Fee Balance (`expectedDiscountFeeBalance`):* Remaining unrecognized discount fee income on the projection: `discountFee − round(aggregateAccrual[i])`, closing on zero. Not the running sum of the reported `expectedAmortizationAmount` column: a settled day restates the total from what the money received has really earned, and the day's reported share is the movement of the rounded total either side of that, so the column and the balance need not telescope across a restatement. Falls for as long as one rate governs the days being projected. Formerly serialized as `deferredBalance`. *Projected Discount Fee Balance (`actualDiscountFeeBalance`):* Remaining unrecognized discount fee income based on actual amortizations: `discountFee − Σ(actualAmortizationAmount[1..i])`. `null` for unpaid future periods; deviates from planned when payments differ. -*EIR (Effective Interest Rate):* The daily periodic rate solved via Newton-Raphson from `RATE(originalPaymentNumber, −expectedPayment, netDisbursementAmount)`. The same EIR drives the balance recurrence for both tracks. See the xref:working-capital-eir-calculation.adoc[EIR Calculation] document for the solver algorithm and rate segment handling. +*EIR (Effective Interest Rate):* The daily periodic rate solved by Newton-Raphson as the IRR of the payment series the borrower will actually pay - the net disbursement out, `originalPaymentNumber − 1` daily payments in, and the closing remainder in. The same EIR drives the balance recurrence for both tracks. See the xref:working-capital-eir-calculation.adoc[EIR Calculation] document for the solver algorithm and how a rate change is applied. *Income Modification:* The per-period difference `actualAmortization − expectedAmortization`. Positive when the borrower over-pays, negative on underpayment, `null` on no payment. @@ -50,7 +50,7 @@ The scope of this document includes: A single `balance` field cannot distinguish between "what the balance would have been with on-time payments" and "what the balance actually is". The two-track model makes this explicit: * The planned track is always fully populated and never changes retroactively once built — it is the reference schedule. -* The actual track is populated only where cash has been received or the business date has passed. A period with a zero-amount payment records `actualBalance = actualBalance[i-1] × (1 + EIR) − 0` (no reduction), while a no-payment period remains `null`. +* The actual track is populated only where cash has been received or the business date has passed. It moves only when money moves: a day with a zero-amount payment carries the previous balance forward unchanged - nothing accrues on it, because the fee is earned on money in and no money came in - while a day nothing is known about remains `null`. === Backward Compatibility via @SerializedName Aliases @@ -59,7 +59,7 @@ A single `balance` field cannot distinguish between "what the balance would have * `"balance"` → `expectedBalance` * `"deferredBalance"` → `expectedDiscountFeeBalance` -Model JSON version `"4"` is the current canonical version that writes the new field names. Models persisted under earlier versions are read with the aliases and re-persisted under version `"4"` on the next write. +Model JSON version `"7"` is the current canonical version. The aliases are what let a model persisted under an earlier version be read at all; it is re-persisted under the current version on the next write. === Disbursement Row Initializes Both Tracks Identically @@ -74,37 +74,65 @@ From period 1 onward the tracks diverge based on actual payment behaviour. === Planned Balance Recurrence -For every period `i` from 1 to `effectiveTotalTerm`: +For every day `i`, until the balance closes and the schedule has caught up with `calculatedTillDate`: ---- -expectedBalance[i] = expectedBalance[i-1] × (1 + EIR) − expectedPayment -expectedAmortizationAmount[i] = expectedBalance[i-1] × EIR - = expectedBalance[i] + expectedPayment − expectedBalance[i-1] -expectedDiscountFeeBalance[i] = discountFee − Σ(expectedAmortizationAmount[1..i]) +billedInstalment[i] = min(instalment in force, expectedBalance[i-1] × (1 + EIR)) +expectedBalance[i] = expectedBalance[i-1] × (1 + EIR) − billedInstalment[i] +accrual[i] = expectedBalance[i-1] × EIR (high precision) +aggregateAccrual[i] = aggregateAccrual[i-1] + accrual[i] (high precision) +expectedAmortizationAmount[i] = round(aggregateAccrual[i]) − round(aggregateAccrual[i-1]) +expectedDiscountFeeBalance[i] = discountFee − round(aggregateAccrual[i]) ---- -`expectedBalance` is computed unconditionally for all periods regardless of actual cash received. The final period balance converges to zero by construction. +The instalment is capped at the balance it has to close, so no day bills more than is owed. +The reported amortization is the difference between two rounded running totals rather than a +rounded day, which is what keeps `expectedDiscountFeeBalance` from drifting and lets it close +on exactly zero. The final balance converges to zero by construction, because the EIR was +solved against the very cash flow the schedule bills. + +There is no fixed number of days: the walk runs until the loan is square. A borrower who has +fallen behind gets more days, one who has paid ahead gets fewer. === Projected Balance Recurrence -For periods where a positive payment exists: +The actual track is driven by money collected, not by time passed: ---- -actualBalance[i] = actualBalance[i-1] × (1 + EIR) − actualPayment[i] -actualAmortizationAmount[i] = cursor-based consumption of expected amortizations -actualDiscountFeeBalance[i] = discountFee − Σ(actualAmortizationAmount[1..i]) +collected[i] = collected[i-1] + actualPayment[i] +feeEarned[i] = planCurve(collected[i]) (high precision) +actualAmortizationAmount[i] = round(feeEarned[i]) − round(feeEarned[i-1]) +actualBalance[i] = max(0, netDisbursement − collected[i] + round(feeEarned[i])) +actualDiscountFeeBalance[i] = discountFee − round(feeEarned[i]) ---- -At the start of each rate segment the actual balance is reset to `segment.netDisbursementAtSplit` to align with the segment's EIR. +`planCurve` is the planned recurrence above run on its own instalments, read at the amount +collected — so repaying the whole payable earns the whole fee however few days it took, and +paying beyond the payable earns nothing further. It is walked as a cursor alongside the +calendar, not precomputed. + +A rate change moves no money, so the actual balance carries straight through it; only the +instalment and rate the days ahead are solved at change. + +For days where no record exists at all (no payment, and not yet elapsed): + +* `actualBalance`, `actualPaymentAmount`, `actualAmortizationAmount`, `incomeModification` and `actualDiscountFeeBalance` are `null` — nothing is known about the day yet. +* A day that elapsed with nothing on it reports nil rather than nothing: a missed instalment is a fact about the loan, and it earns no fee. -For periods where no payment was received (`actualPayment = null`): +=== Where the Expected Track Is Restated -* `actualBalance` is `null` for future periods; for past periods (before `calculatedTillDate`) it is set to the running actual balance carried forward without reduction. -* `actualAmortizationAmount`, `incomeModification`, and `actualDiscountFeeBalance` are `null`. +A settled day — one that was paid, or that elapsed unpaid — restates what follows it. The +balance carried forward becomes what the borrower really owes, and the expected fee total is +re-seeded from the actual one, both the high-precision total and its rounded form together. +Days that have not come round yet keep the plan they were written with, so an instalment paid +in full and on time moves nothing. === EIR Linkage -The EIR used in both recurrences is identical — it is solved once from the contract terms and stored in `ProjectedAmortizationScheduleModel.effectiveInterestRate`. For segments created by a rate change, `RateSegment.effectiveInterestRate` replaces the base rate from `startDayIndex` onward, for both planned and actual computations. +The EIR is solved once from the contract terms and stored in +`ProjectedAmortizationScheduleModel.effectiveInterestRate`. A rate change re-solves it from +the balance and unearned fee the walk is carrying on the effective day, and it drives both +tracks from that day onward. == Schedule Fields @@ -124,11 +152,11 @@ The `ProjectedAmortizationSchedulePaymentData` record exposes per-payment fields | `expectedPaymentAmount` | Yes -| Constant daily expected payment derived from TPV, `periodPaymentRate`, and `npvDayCount`. Row 0: `−netDisbursementAmount`. Tail rows: may be less than expected when trimmed. +| The daily instalment derived from TPV, `periodPaymentRate` and `npvDayCount`, capped at the balance the day has to close — so the closing day bills only what is left. Row 0: `−netDisbursementAmount`. | `expectedBalance` | Yes -| *Planned balance* — what the outstanding principal would be if all expected payments were received on time. Null for trimmed tail rows. Alias `balance` in pre-v4 JSON. +| *Planned balance* — what the outstanding principal would be if every instalment from here were paid on time. Restated from reality on any day already settled. Alias `balance` in pre-v4 JSON. | `actualBalance` | Yes @@ -136,7 +164,7 @@ The `ProjectedAmortizationSchedulePaymentData` record exposes per-payment fields | `expectedAmortizationAmount` | Yes -| Fee income recognized per period under the planned track. `min(expectedBalance[i-1] × EIR, remainingDiscountFee)`. Null for row 0 and tail rows. +| Fee income recognized per day under the planned track: `round(aggregateAccrual[i]) − round(aggregateAccrual[i-1])`, the accrual being `expectedBalance[i-1] × EIR`. Null for row 0. | `actualPaymentAmount` | Yes @@ -144,7 +172,7 @@ The `ProjectedAmortizationSchedulePaymentData` record exposes per-payment fields | `actualAmortizationAmount` | Yes -| Fee income recognized per period under the projected track (cursor-based). Null for unpaid periods. +| Fee income recognized per period under the projected track, read off the plan curve at the money collected. Null for periods with no record at all. | `expectedDiscountFeeBalance` | Yes @@ -236,7 +264,7 @@ When no payments have been received, `actualBalance`, `actualAmortizationAmount` * The planned balance is recomputed for all periods on every rebuild (`rebuildPayments`), including after payments are applied or a rate change is recorded. * Planned balance values do not change retroactively for past periods after a new payment is applied — they reflect the current contracted payment amount, not historical snapshots. -* When a rate segment begins at `startDayIndex`, the planned balance resets to `segment.netDisbursementAtSplit` and continues the recurrence using `segment.effectiveInterestRate` and `segment.expectedPaymentAmount`. +* On the day a rate change takes effect, the balance carries straight through — a rate change moves no money — and the recurrence continues at the newly solved instalment and EIR. === Projected Track Population @@ -254,7 +282,7 @@ The two tracks converge at disbursement and diverge based on payment behavior: === Deferred Balance Invariants -* `expectedDiscountFeeBalance` decreases monotonically from `discountFeeAmount` at row 0 to `≥ 0` over the term. +* `expectedDiscountFeeBalance` starts at `discountFeeAmount` on row 0, never goes below zero, and falls on every day except one a rate change takes effect on, where the projection is re-priced. * `actualDiscountFeeBalance` + cumulative `actualAmortizationAmount` = `discountFeeAmount` (for paid periods). * Both planned and projected deferred balances are capped at `discountFeeAmount` and floored at zero. @@ -311,5 +339,5 @@ The Working Capital planned and projected balance model provides two parallel vi * *Planned balances* (`expectedBalance`, `expectedDiscountFeeBalance`) reflect the contracted schedule assuming all payments arrive on time. They are always fully populated and serve as the reference for income recognition targets. * *Projected balances* (`actualBalance`, `actualDiscountFeeBalance`) reflect real payment activity. They populate period by period as cash is received and diverge from planned whenever payments deviate from the expected amount. -* Both tracks share the same EIR, derived once via Newton-Raphson from the contract terms and recomputed per rate segment when the period payment rate changes mid-lifecycle. +* Both tracks share the same EIR, derived once from the contract terms and re-solved on the day a rate change takes effect, from the balance and unearned fee the walk is carrying then. * The `incomeModification` field quantifies the per-period difference, enabling lenders to reconcile actual income recognized against the contracted schedule. diff --git a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalAmortizationScheduleStepDef.java b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalAmortizationScheduleStepDef.java index 42caf78901e..7083016c9e2 100644 --- a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalAmortizationScheduleStepDef.java +++ b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/loan/WorkingCapitalAmortizationScheduleStepDef.java @@ -373,10 +373,10 @@ public void verifyRetrievedScheduleExpectedAmortizationClosesToDiscountFee() { } /** - * Ledger/schedule consistency guard (PS-3313 "amortization amounts + not yet amortized amounts matches discount - * fee"): the actual amortization rows must add up to the realized discount-fee income booked on the loan, the last - * paid row's actual discount fee balance must equal the loan's unrealized income, and realized + unrealized must - * equal the discount fee the schedule was built with. + * Ledger/schedule consistency guard ("amortization amounts + not yet amortized amounts matches discount fee"): the + * actual amortization rows must add up to the realized discount-fee income booked on the loan, the last paid row's + * actual discount fee balance must equal the loan's unrealized income, and realized + unrealized must equal the + * discount fee the schedule was built with. * *
* Precondition: use it right after a close of business on a loan that is still active. The ledger only follows the
diff --git a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalAmortizationSchedule.feature b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalAmortizationSchedule.feature
index e42e90af67b..a2eb9166263 100644
--- a/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalAmortizationSchedule.feature
+++ b/fineract-e2e-tests-runner/src/test/resources/features/WorkingCapitalAmortizationSchedule.feature
@@ -25,198 +25,198 @@ Feature: WorkingCapitalAmortizationSchedule
| 6 | 2019-01-07 | 50.00 | 8757.01 | 9.39 | | | 942.99 | | |
| 7 | 2019-01-08 | 50.00 | 8716.36 | 9.35 | | | 933.64 | | |
| 8 | 2019-01-09 | 50.00 | 8675.67 | 9.31 | | | 924.33 | | |
- | 9 | 2019-01-10 | 50.00 | 8634.94 | 9.26 | | | 915.07 | | |
- | 10 | 2019-01-11 | 50.00 | 8594.16 | 9.22 | | | 905.85 | | |
- | 11 | 2019-01-12 | 50.00 | 8553.33 | 9.18 | | | 896.67 | | |
- | 12 | 2019-01-13 | 50.00 | 8512.47 | 9.13 | | | 887.54 | | |
- | 13 | 2019-01-14 | 50.00 | 8471.56 | 9.09 | | | 878.45 | | |
- | 14 | 2019-01-15 | 50.00 | 8430.60 | 9.05 | | | 869.40 | | |
- | 15 | 2019-01-16 | 50.00 | 8389.61 | 9.00 | | | 860.40 | | |
- | 16 | 2019-01-17 | 50.00 | 8348.56 | 8.96 | | | 851.44 | | |
- | 17 | 2019-01-18 | 50.00 | 8307.48 | 8.91 | | | 842.53 | | |
- | 18 | 2019-01-19 | 50.00 | 8266.35 | 8.87 | | | 833.66 | | |
- | 19 | 2019-01-20 | 50.00 | 8225.18 | 8.83 | | | 824.83 | | |
- | 20 | 2019-01-21 | 50.00 | 8183.96 | 8.78 | | | 816.05 | | |
- | 21 | 2019-01-22 | 50.00 | 8142.70 | 8.74 | | | 807.31 | | |
- | 22 | 2019-01-23 | 50.00 | 8101.39 | 8.69 | | | 798.62 | | |
- | 23 | 2019-01-24 | 50.00 | 8060.04 | 8.65 | | | 789.97 | | |
- | 24 | 2019-01-25 | 50.00 | 8018.65 | 8.61 | | | 781.36 | | |
- | 25 | 2019-01-26 | 50.00 | 7977.21 | 8.56 | | | 772.80 | | |
- | 26 | 2019-01-27 | 50.00 | 7935.73 | 8.52 | | | 764.28 | | |
- | 27 | 2019-01-28 | 50.00 | 7894.21 | 8.47 | | | 755.81 | | |
- | 28 | 2019-01-29 | 50.00 | 7852.63 | 8.43 | | | 747.38 | | |
- | 29 | 2019-01-30 | 50.00 | 7811.02 | 8.39 | | | 738.99 | | |
- | 30 | 2019-01-31 | 50.00 | 7769.36 | 8.34 | | | 730.65 | | |
- | 31 | 2019-02-01 | 50.00 | 7727.66 | 8.30 | | | 722.35 | | |
- | 32 | 2019-02-02 | 50.00 | 7685.91 | 8.25 | | | 714.10 | | |
- | 33 | 2019-02-03 | 50.00 | 7644.12 | 8.21 | | | 705.89 | | |
- | 34 | 2019-02-04 | 50.00 | 7602.28 | 8.16 | | | 697.73 | | |
- | 35 | 2019-02-05 | 50.00 | 7560.40 | 8.12 | | | 689.61 | | |
- | 36 | 2019-02-06 | 50.00 | 7518.47 | 8.07 | | | 681.54 | | |
- | 37 | 2019-02-07 | 50.00 | 7476.50 | 8.03 | | | 673.51 | | |
- | 38 | 2019-02-08 | 50.00 | 7434.48 | 7.98 | | | 665.53 | | |
- | 39 | 2019-02-09 | 50.00 | 7392.42 | 7.94 | | | 657.59 | | |
- | 40 | 2019-02-10 | 50.00 | 7350.31 | 7.89 | | | 649.70 | | |
- | 41 | 2019-02-11 | 50.00 | 7308.16 | 7.85 | | | 641.85 | | |
- | 42 | 2019-02-12 | 50.00 | 7265.97 | 7.80 | | | 634.05 | | |
- | 43 | 2019-02-13 | 50.00 | 7223.72 | 7.76 | | | 626.29 | | |
- | 44 | 2019-02-14 | 50.00 | 7181.44 | 7.71 | | | 618.58 | | |
- | 45 | 2019-02-15 | 50.00 | 7139.11 | 7.67 | | | 610.91 | | |
- | 46 | 2019-02-16 | 50.00 | 7096.73 | 7.62 | | | 603.29 | | |
- | 47 | 2019-02-17 | 50.00 | 7054.31 | 7.58 | | | 595.71 | | |
- | 48 | 2019-02-18 | 50.00 | 7011.84 | 7.53 | | | 588.18 | | |
- | 49 | 2019-02-19 | 50.00 | 6969.33 | 7.49 | | | 580.69 | | |
- | 50 | 2019-02-20 | 50.00 | 6926.77 | 7.44 | | | 573.25 | | |
- | 51 | 2019-02-21 | 50.00 | 6884.17 | 7.40 | | | 565.85 | | |
- | 52 | 2019-02-22 | 50.00 | 6841.52 | 7.35 | | | 558.50 | | |
- | 53 | 2019-02-23 | 50.00 | 6798.82 | 7.31 | | | 551.19 | | |
- | 54 | 2019-02-24 | 50.00 | 6756.08 | 7.26 | | | 543.93 | | |
- | 55 | 2019-02-25 | 50.00 | 6713.30 | 7.21 | | | 536.72 | | |
- | 56 | 2019-02-26 | 50.00 | 6670.47 | 7.17 | | | 529.55 | | |
- | 57 | 2019-02-27 | 50.00 | 6627.59 | 7.12 | | | 522.43 | | |
- | 58 | 2019-02-28 | 50.00 | 6584.67 | 7.08 | | | 515.35 | | |
- | 59 | 2019-03-01 | 50.00 | 6541.70 | 7.03 | | | 508.32 | | |
- | 60 | 2019-03-02 | 50.00 | 6498.68 | 6.99 | | | 501.33 | | |
- | 61 | 2019-03-03 | 50.00 | 6455.62 | 6.94 | | | 494.39 | | |
- | 62 | 2019-03-04 | 50.00 | 6412.51 | 6.89 | | | 487.50 | | |
- | 63 | 2019-03-05 | 50.00 | 6369.36 | 6.85 | | | 480.65 | | |
- | 64 | 2019-03-06 | 50.00 | 6326.16 | 6.80 | | | 473.85 | | |
- | 65 | 2019-03-07 | 50.00 | 6282.92 | 6.76 | | | 467.09 | | |
- | 66 | 2019-03-08 | 50.00 | 6239.63 | 6.71 | | | 460.38 | | |
- | 67 | 2019-03-09 | 50.00 | 6196.29 | 6.66 | | | 453.72 | | |
- | 68 | 2019-03-10 | 50.00 | 6152.91 | 6.62 | | | 447.10 | | |
- | 69 | 2019-03-11 | 50.00 | 6109.48 | 6.57 | | | 440.53 | | |
- | 70 | 2019-03-12 | 50.00 | 6066.00 | 6.52 | | | 434.01 | | |
- | 71 | 2019-03-13 | 50.00 | 6022.48 | 6.48 | | | 427.53 | | |
- | 72 | 2019-03-14 | 50.00 | 5978.91 | 6.43 | | | 421.10 | | |
- | 73 | 2019-03-15 | 50.00 | 5935.29 | 6.38 | | | 414.72 | | |
- | 74 | 2019-03-16 | 50.00 | 5891.63 | 6.34 | | | 408.38 | | |
- | 75 | 2019-03-17 | 50.00 | 5847.92 | 6.29 | | | 402.09 | | |
- | 76 | 2019-03-18 | 50.00 | 5804.17 | 6.24 | | | 395.85 | | |
- | 77 | 2019-03-19 | 50.00 | 5760.36 | 6.20 | | | 389.65 | | |
- | 78 | 2019-03-20 | 50.00 | 5716.52 | 6.15 | | | 383.50 | | |
- | 79 | 2019-03-21 | 50.00 | 5672.62 | 6.10 | | | 377.40 | | |
- | 80 | 2019-03-22 | 50.00 | 5628.68 | 6.06 | | | 371.34 | | |
- | 81 | 2019-03-23 | 50.00 | 5584.69 | 6.01 | | | 365.33 | | |
- | 82 | 2019-03-24 | 50.00 | 5540.65 | 5.96 | | | 359.37 | | |
- | 83 | 2019-03-25 | 50.00 | 5496.57 | 5.92 | | | 353.45 | | |
- | 84 | 2019-03-26 | 50.00 | 5452.44 | 5.87 | | | 347.58 | | |
- | 85 | 2019-03-27 | 50.00 | 5408.26 | 5.82 | | | 341.76 | | |
- | 86 | 2019-03-28 | 50.00 | 5364.03 | 5.78 | | | 335.98 | | |
- | 87 | 2019-03-29 | 50.00 | 5319.76 | 5.73 | | | 330.25 | | |
- | 88 | 2019-03-30 | 50.00 | 5275.44 | 5.68 | | | 324.57 | | |
- | 89 | 2019-03-31 | 50.00 | 5231.08 | 5.63 | | | 318.94 | | |
- | 90 | 2019-04-01 | 50.00 | 5186.66 | 5.59 | | | 313.35 | | |
- | 91 | 2019-04-02 | 50.00 | 5142.20 | 5.54 | | | 307.81 | | |
- | 92 | 2019-04-03 | 50.00 | 5097.69 | 5.49 | | | 302.32 | | |
- | 93 | 2019-04-04 | 50.00 | 5053.13 | 5.44 | | | 296.88 | | |
- | 94 | 2019-04-05 | 50.00 | 5008.53 | 5.40 | | | 291.48 | | |
- | 95 | 2019-04-06 | 50.00 | 4963.88 | 5.35 | | | 286.13 | | |
- | 96 | 2019-04-07 | 50.00 | 4919.18 | 5.30 | | | 280.83 | | |
- | 97 | 2019-04-08 | 50.00 | 4874.43 | 5.25 | | | 275.58 | | |
- | 98 | 2019-04-09 | 50.00 | 4829.64 | 5.20 | | | 270.38 | | |
- | 99 | 2019-04-10 | 50.00 | 4784.79 | 5.16 | | | 265.22 | | |
- | 100 | 2019-04-11 | 50.00 | 4739.90 | 5.11 | | | 260.11 | | |
- | 101 | 2019-04-12 | 50.00 | 4694.96 | 5.06 | | | 255.05 | | |
- | 102 | 2019-04-13 | 50.00 | 4649.98 | 5.01 | | | 250.04 | | |
- | 103 | 2019-04-14 | 50.00 | 4604.94 | 4.97 | | | 245.07 | | |
- | 104 | 2019-04-15 | 50.00 | 4559.86 | 4.92 | | | 240.15 | | |
- | 105 | 2019-04-16 | 50.00 | 4514.73 | 4.87 | | | 235.28 | | |
- | 106 | 2019-04-17 | 50.00 | 4469.55 | 4.82 | | | 230.46 | | |
- | 107 | 2019-04-18 | 50.00 | 4424.32 | 4.77 | | | 225.69 | | |
- | 108 | 2019-04-19 | 50.00 | 4379.05 | 4.72 | | | 220.97 | | |
- | 109 | 2019-04-20 | 50.00 | 4333.72 | 4.68 | | | 216.29 | | |
- | 110 | 2019-04-21 | 50.00 | 4288.35 | 4.63 | | | 211.66 | | |
- | 111 | 2019-04-22 | 50.00 | 4242.93 | 4.58 | | | 207.08 | | |
- | 112 | 2019-04-23 | 50.00 | 4197.46 | 4.53 | | | 202.55 | | |
- | 113 | 2019-04-24 | 50.00 | 4151.94 | 4.48 | | | 198.07 | | |
- | 114 | 2019-04-25 | 50.00 | 4106.38 | 4.43 | | | 193.64 | | |
- | 115 | 2019-04-26 | 50.00 | 4060.76 | 4.38 | | | 189.26 | | |
- | 116 | 2019-04-27 | 50.00 | 4015.10 | 4.34 | | | 184.92 | | |
- | 117 | 2019-04-28 | 50.00 | 3969.38 | 4.29 | | | 180.63 | | |
- | 118 | 2019-04-29 | 50.00 | 3923.62 | 4.24 | | | 176.39 | | |
- | 119 | 2019-04-30 | 50.00 | 3877.81 | 4.19 | | | 172.20 | | |
- | 120 | 2019-05-01 | 50.00 | 3831.95 | 4.14 | | | 168.06 | | |
- | 121 | 2019-05-02 | 50.00 | 3786.04 | 4.09 | | | 163.97 | | |
- | 122 | 2019-05-03 | 50.00 | 3740.09 | 4.04 | | | 159.93 | | |
- | 123 | 2019-05-04 | 50.00 | 3694.08 | 3.99 | | | 155.94 | | |
- | 124 | 2019-05-05 | 50.00 | 3648.03 | 3.94 | | | 152.00 | | |
- | 125 | 2019-05-06 | 50.00 | 3601.92 | 3.90 | | | 148.10 | | |
- | 126 | 2019-05-07 | 50.00 | 3555.77 | 3.85 | | | 144.25 | | |
- | 127 | 2019-05-08 | 50.00 | 3509.56 | 3.80 | | | 140.45 | | |
- | 128 | 2019-05-09 | 50.00 | 3463.31 | 3.75 | | | 136.70 | | |
- | 129 | 2019-05-10 | 50.00 | 3417.01 | 3.70 | | | 133.00 | | |
- | 130 | 2019-05-11 | 50.00 | 3370.66 | 3.65 | | | 129.35 | | |
- | 131 | 2019-05-12 | 50.00 | 3324.26 | 3.60 | | | 125.75 | | |
- | 132 | 2019-05-13 | 50.00 | 3277.81 | 3.55 | | | 122.20 | | |
- | 133 | 2019-05-14 | 50.00 | 3231.31 | 3.50 | | | 118.70 | | |
- | 134 | 2019-05-15 | 50.00 | 3184.76 | 3.45 | | | 115.25 | | |
- | 135 | 2019-05-16 | 50.00 | 3138.16 | 3.40 | | | 111.85 | | |
- | 136 | 2019-05-17 | 50.00 | 3091.51 | 3.35 | | | 108.50 | | |
- | 137 | 2019-05-18 | 50.00 | 3044.81 | 3.30 | | | 105.20 | | |
- | 138 | 2019-05-19 | 50.00 | 2998.06 | 3.25 | | | 101.95 | | |
- | 139 | 2019-05-20 | 50.00 | 2951.26 | 3.20 | | | 98.75 | | |
- | 140 | 2019-05-21 | 50.00 | 2904.42 | 3.15 | | | 95.60 | | |
- | 141 | 2019-05-22 | 50.00 | 2857.52 | 3.10 | | | 92.50 | | |
- | 142 | 2019-05-23 | 50.00 | 2810.57 | 3.05 | | | 89.45 | | |
- | 143 | 2019-05-24 | 50.00 | 2763.57 | 3.00 | | | 86.45 | | |
- | 144 | 2019-05-25 | 50.00 | 2716.52 | 2.95 | | | 83.50 | | |
- | 145 | 2019-05-26 | 50.00 | 2669.42 | 2.90 | | | 80.60 | | |
- | 146 | 2019-05-27 | 50.00 | 2622.27 | 2.85 | | | 77.75 | | |
- | 147 | 2019-05-28 | 50.00 | 2575.07 | 2.80 | | | 74.95 | | |
- | 148 | 2019-05-29 | 50.00 | 2527.82 | 2.75 | | | 72.20 | | |
- | 149 | 2019-05-30 | 50.00 | 2480.52 | 2.70 | | | 69.50 | | |
- | 150 | 2019-05-31 | 50.00 | 2433.17 | 2.65 | | | 66.85 | | |
- | 151 | 2019-06-01 | 50.00 | 2385.77 | 2.60 | | | 64.25 | | |
- | 152 | 2019-06-02 | 50.00 | 2338.31 | 2.55 | | | 61.70 | | |
- | 153 | 2019-06-03 | 50.00 | 2290.81 | 2.50 | | | 59.20 | | |
- | 154 | 2019-06-04 | 50.00 | 2243.26 | 2.45 | | | 56.75 | | |
- | 155 | 2019-06-05 | 50.00 | 2195.65 | 2.40 | | | 54.35 | | |
- | 156 | 2019-06-06 | 50.00 | 2148.00 | 2.34 | | | 52.01 | | |
- | 157 | 2019-06-07 | 50.00 | 2100.29 | 2.29 | | | 49.72 | | |
- | 158 | 2019-06-08 | 50.00 | 2052.53 | 2.24 | | | 47.48 | | |
- | 159 | 2019-06-09 | 50.00 | 2004.73 | 2.19 | | | 45.29 | | |
- | 160 | 2019-06-10 | 50.00 | 1956.87 | 2.14 | | | 43.15 | | |
- | 161 | 2019-06-11 | 50.00 | 1908.96 | 2.09 | | | 41.06 | | |
- | 162 | 2019-06-12 | 50.00 | 1860.99 | 2.04 | | | 39.02 | | |
- | 163 | 2019-06-13 | 50.00 | 1812.98 | 1.99 | | | 37.03 | | |
- | 164 | 2019-06-14 | 50.00 | 1764.92 | 1.94 | | | 35.09 | | |
- | 165 | 2019-06-15 | 50.00 | 1716.80 | 1.88 | | | 33.21 | | |
- | 166 | 2019-06-16 | 50.00 | 1668.64 | 1.83 | | | 31.38 | | |
- | 167 | 2019-06-17 | 50.00 | 1620.42 | 1.78 | | | 29.60 | | |
- | 168 | 2019-06-18 | 50.00 | 1572.15 | 1.73 | | | 27.87 | | |
- | 169 | 2019-06-19 | 50.00 | 1523.83 | 1.68 | | | 26.19 | | |
- | 170 | 2019-06-20 | 50.00 | 1475.45 | 1.63 | | | 24.56 | | |
- | 171 | 2019-06-21 | 50.00 | 1427.03 | 1.58 | | | 22.98 | | |
- | 172 | 2019-06-22 | 50.00 | 1378.55 | 1.52 | | | 21.46 | | |
- | 173 | 2019-06-23 | 50.00 | 1330.02 | 1.47 | | | 19.99 | | |
- | 174 | 2019-06-24 | 50.00 | 1281.45 | 1.42 | | | 18.57 | | |
- | 175 | 2019-06-25 | 50.00 | 1232.81 | 1.37 | | | 17.20 | | |
- | 176 | 2019-06-26 | 50.00 | 1184.13 | 1.32 | | | 15.88 | | |
- | 177 | 2019-06-27 | 50.00 | 1135.39 | 1.26 | | | 14.62 | | |
- | 178 | 2019-06-28 | 50.00 | 1086.61 | 1.21 | | | 13.41 | | |
- | 179 | 2019-06-29 | 50.00 | 1037.77 | 1.16 | | | 12.25 | | |
- | 180 | 2019-06-30 | 50.00 | 988.88 | 1.11 | | | 11.14 | | |
- | 181 | 2019-07-01 | 50.00 | 939.93 | 1.06 | | | 10.08 | | |
- | 182 | 2019-07-02 | 50.00 | 890.93 | 1.00 | | | 9.08 | | |
- | 183 | 2019-07-03 | 50.00 | 841.89 | 0.95 | | | 8.13 | | |
- | 184 | 2019-07-04 | 50.00 | 792.79 | 0.90 | | | 7.23 | | |
- | 185 | 2019-07-05 | 50.00 | 743.63 | 0.85 | | | 6.38 | | |
- | 186 | 2019-07-06 | 50.00 | 694.43 | 0.79 | | | 5.59 | | |
- | 187 | 2019-07-07 | 50.00 | 645.17 | 0.74 | | | 4.85 | | |
- | 188 | 2019-07-08 | 50.00 | 595.86 | 0.69 | | | 4.16 | | |
- | 189 | 2019-07-09 | 50.00 | 546.49 | 0.64 | | | 3.52 | | |
- | 190 | 2019-07-10 | 50.00 | 497.08 | 0.58 | | | 2.94 | | |
- | 191 | 2019-07-11 | 50.00 | 447.61 | 0.53 | | | 2.41 | | |
- | 192 | 2019-07-12 | 50.00 | 398.08 | 0.48 | | | 1.93 | | |
- | 193 | 2019-07-13 | 50.00 | 348.51 | 0.43 | | | 1.50 | | |
- | 194 | 2019-07-14 | 50.00 | 298.88 | 0.37 | | | 1.13 | | |
- | 195 | 2019-07-15 | 50.00 | 249.20 | 0.32 | | | 0.81 | | |
- | 196 | 2019-07-16 | 50.00 | 199.47 | 0.27 | | | 0.54 | | |
- | 197 | 2019-07-17 | 50.00 | 149.68 | 0.21 | | | 0.33 | | |
- | 198 | 2019-07-18 | 50.00 | 99.84 | 0.16 | | | 0.17 | | |
- | 199 | 2019-07-19 | 50.00 | 49.95 | 0.11 | | | 0.06 | | |
- | 200 | 2019-07-20 | 50.00 | 0.00 | 0.06 | | | 0.00 | | |
+ | 9 | 2019-01-10 | 50.00 | 8634.94 | 9.27 | | | 915.06 | | |
+ | 10 | 2019-01-11 | 50.00 | 8594.16 | 9.22 | | | 905.84 | | |
+ | 11 | 2019-01-12 | 50.00 | 8553.33 | 9.17 | | | 896.67 | | |
+ | 12 | 2019-01-13 | 50.00 | 8512.47 | 9.14 | | | 887.53 | | |
+ | 13 | 2019-01-14 | 50.00 | 8471.56 | 9.09 | | | 878.44 | | |
+ | 14 | 2019-01-15 | 50.00 | 8430.60 | 9.04 | | | 869.40 | | |
+ | 15 | 2019-01-16 | 50.00 | 8389.61 | 9.01 | | | 860.39 | | |
+ | 16 | 2019-01-17 | 50.00 | 8348.56 | 8.95 | | | 851.44 | | |
+ | 17 | 2019-01-18 | 50.00 | 8307.48 | 8.92 | | | 842.52 | | |
+ | 18 | 2019-01-19 | 50.00 | 8266.35 | 8.87 | | | 833.65 | | |
+ | 19 | 2019-01-20 | 50.00 | 8225.18 | 8.83 | | | 824.82 | | |
+ | 20 | 2019-01-21 | 50.00 | 8183.96 | 8.78 | | | 816.04 | | |
+ | 21 | 2019-01-22 | 50.00 | 8142.70 | 8.74 | | | 807.30 | | |
+ | 22 | 2019-01-23 | 50.00 | 8101.39 | 8.69 | | | 798.61 | | |
+ | 23 | 2019-01-24 | 50.00 | 8060.04 | 8.65 | | | 789.96 | | |
+ | 24 | 2019-01-25 | 50.00 | 8018.65 | 8.61 | | | 781.35 | | |
+ | 25 | 2019-01-26 | 50.00 | 7977.21 | 8.56 | | | 772.79 | | |
+ | 26 | 2019-01-27 | 50.00 | 7935.73 | 8.52 | | | 764.27 | | |
+ | 27 | 2019-01-28 | 50.00 | 7894.21 | 8.48 | | | 755.79 | | |
+ | 28 | 2019-01-29 | 50.00 | 7852.63 | 8.42 | | | 747.37 | | |
+ | 29 | 2019-01-30 | 50.00 | 7811.02 | 8.39 | | | 738.98 | | |
+ | 30 | 2019-01-31 | 50.00 | 7769.36 | 8.34 | | | 730.64 | | |
+ | 31 | 2019-02-01 | 50.00 | 7727.66 | 8.30 | | | 722.34 | | |
+ | 32 | 2019-02-02 | 50.00 | 7685.91 | 8.25 | | | 714.09 | | |
+ | 33 | 2019-02-03 | 50.00 | 7644.12 | 8.21 | | | 705.88 | | |
+ | 34 | 2019-02-04 | 50.00 | 7602.28 | 8.16 | | | 697.72 | | |
+ | 35 | 2019-02-05 | 50.00 | 7560.40 | 8.12 | | | 689.60 | | |
+ | 36 | 2019-02-06 | 50.00 | 7518.47 | 8.07 | | | 681.53 | | |
+ | 37 | 2019-02-07 | 50.00 | 7476.50 | 8.03 | | | 673.50 | | |
+ | 38 | 2019-02-08 | 50.00 | 7434.48 | 7.98 | | | 665.52 | | |
+ | 39 | 2019-02-09 | 50.00 | 7392.42 | 7.94 | | | 657.58 | | |
+ | 40 | 2019-02-10 | 50.00 | 7350.31 | 7.89 | | | 649.69 | | |
+ | 41 | 2019-02-11 | 50.00 | 7308.16 | 7.85 | | | 641.84 | | |
+ | 42 | 2019-02-12 | 50.00 | 7265.97 | 7.81 | | | 634.03 | | |
+ | 43 | 2019-02-13 | 50.00 | 7223.72 | 7.75 | | | 626.28 | | |
+ | 44 | 2019-02-14 | 50.00 | 7181.44 | 7.72 | | | 618.56 | | |
+ | 45 | 2019-02-15 | 50.00 | 7139.11 | 7.67 | | | 610.89 | | |
+ | 46 | 2019-02-16 | 50.00 | 7096.73 | 7.62 | | | 603.27 | | |
+ | 47 | 2019-02-17 | 50.00 | 7054.31 | 7.58 | | | 595.69 | | |
+ | 48 | 2019-02-18 | 50.00 | 7011.84 | 7.53 | | | 588.16 | | |
+ | 49 | 2019-02-19 | 50.00 | 6969.33 | 7.49 | | | 580.67 | | |
+ | 50 | 2019-02-20 | 50.00 | 6926.77 | 7.44 | | | 573.23 | | |
+ | 51 | 2019-02-21 | 50.00 | 6884.17 | 7.40 | | | 565.83 | | |
+ | 52 | 2019-02-22 | 50.00 | 6841.52 | 7.35 | | | 558.48 | | |
+ | 53 | 2019-02-23 | 50.00 | 6798.82 | 7.30 | | | 551.18 | | |
+ | 54 | 2019-02-24 | 50.00 | 6756.08 | 7.26 | | | 543.92 | | |
+ | 55 | 2019-02-25 | 50.00 | 6713.30 | 7.22 | | | 536.70 | | |
+ | 56 | 2019-02-26 | 50.00 | 6670.47 | 7.17 | | | 529.53 | | |
+ | 57 | 2019-02-27 | 50.00 | 6627.59 | 7.12 | | | 522.41 | | |
+ | 58 | 2019-02-28 | 50.00 | 6584.67 | 7.08 | | | 515.33 | | |
+ | 59 | 2019-03-01 | 50.00 | 6541.70 | 7.03 | | | 508.30 | | |
+ | 60 | 2019-03-02 | 50.00 | 6498.68 | 6.98 | | | 501.32 | | |
+ | 61 | 2019-03-03 | 50.00 | 6455.62 | 6.94 | | | 494.38 | | |
+ | 62 | 2019-03-04 | 50.00 | 6412.51 | 6.89 | | | 487.49 | | |
+ | 63 | 2019-03-05 | 50.00 | 6369.36 | 6.85 | | | 480.64 | | |
+ | 64 | 2019-03-06 | 50.00 | 6326.16 | 6.80 | | | 473.84 | | |
+ | 65 | 2019-03-07 | 50.00 | 6282.92 | 6.76 | | | 467.08 | | |
+ | 66 | 2019-03-08 | 50.00 | 6239.63 | 6.71 | | | 460.37 | | |
+ | 67 | 2019-03-09 | 50.00 | 6196.29 | 6.66 | | | 453.71 | | |
+ | 68 | 2019-03-10 | 50.00 | 6152.91 | 6.62 | | | 447.09 | | |
+ | 69 | 2019-03-11 | 50.00 | 6109.48 | 6.57 | | | 440.52 | | |
+ | 70 | 2019-03-12 | 50.00 | 6066.00 | 6.52 | | | 434.00 | | |
+ | 71 | 2019-03-13 | 50.00 | 6022.48 | 6.48 | | | 427.52 | | |
+ | 72 | 2019-03-14 | 50.00 | 5978.91 | 6.43 | | | 421.09 | | |
+ | 73 | 2019-03-15 | 50.00 | 5935.29 | 6.38 | | | 414.71 | | |
+ | 74 | 2019-03-16 | 50.00 | 5891.63 | 6.34 | | | 408.37 | | |
+ | 75 | 2019-03-17 | 50.00 | 5847.92 | 6.29 | | | 402.08 | | |
+ | 76 | 2019-03-18 | 50.00 | 5804.17 | 6.25 | | | 395.83 | | |
+ | 77 | 2019-03-19 | 50.00 | 5760.36 | 6.19 | | | 389.64 | | |
+ | 78 | 2019-03-20 | 50.00 | 5716.52 | 6.16 | | | 383.48 | | |
+ | 79 | 2019-03-21 | 50.00 | 5672.62 | 6.10 | | | 377.38 | | |
+ | 80 | 2019-03-22 | 50.00 | 5628.68 | 6.06 | | | 371.32 | | |
+ | 81 | 2019-03-23 | 50.00 | 5584.69 | 6.01 | | | 365.31 | | |
+ | 82 | 2019-03-24 | 50.00 | 5540.65 | 5.96 | | | 359.35 | | |
+ | 83 | 2019-03-25 | 50.00 | 5496.57 | 5.92 | | | 353.43 | | |
+ | 84 | 2019-03-26 | 50.00 | 5452.44 | 5.87 | | | 347.56 | | |
+ | 85 | 2019-03-27 | 50.00 | 5408.26 | 5.82 | | | 341.74 | | |
+ | 86 | 2019-03-28 | 50.00 | 5364.03 | 5.77 | | | 335.97 | | |
+ | 87 | 2019-03-29 | 50.00 | 5319.76 | 5.73 | | | 330.24 | | |
+ | 88 | 2019-03-30 | 50.00 | 5275.44 | 5.68 | | | 324.56 | | |
+ | 89 | 2019-03-31 | 50.00 | 5231.08 | 5.64 | | | 318.92 | | |
+ | 90 | 2019-04-01 | 50.00 | 5186.66 | 5.58 | | | 313.34 | | |
+ | 91 | 2019-04-02 | 50.00 | 5142.20 | 5.54 | | | 307.80 | | |
+ | 92 | 2019-04-03 | 50.00 | 5097.69 | 5.49 | | | 302.31 | | |
+ | 93 | 2019-04-04 | 50.00 | 5053.13 | 5.44 | | | 296.87 | | |
+ | 94 | 2019-04-05 | 50.00 | 5008.53 | 5.40 | | | 291.47 | | |
+ | 95 | 2019-04-06 | 50.00 | 4963.88 | 5.35 | | | 286.12 | | |
+ | 96 | 2019-04-07 | 50.00 | 4919.18 | 5.30 | | | 280.82 | | |
+ | 97 | 2019-04-08 | 50.00 | 4874.43 | 5.25 | | | 275.57 | | |
+ | 98 | 2019-04-09 | 50.00 | 4829.64 | 5.21 | | | 270.36 | | |
+ | 99 | 2019-04-10 | 50.00 | 4784.79 | 5.15 | | | 265.21 | | |
+ | 100 | 2019-04-11 | 50.00 | 4739.90 | 5.11 | | | 260.10 | | |
+ | 101 | 2019-04-12 | 50.00 | 4694.96 | 5.06 | | | 255.04 | | |
+ | 102 | 2019-04-13 | 50.00 | 4649.98 | 5.02 | | | 250.02 | | |
+ | 103 | 2019-04-14 | 50.00 | 4604.94 | 4.96 | | | 245.06 | | |
+ | 104 | 2019-04-15 | 50.00 | 4559.86 | 4.92 | | | 240.14 | | |
+ | 105 | 2019-04-16 | 50.00 | 4514.73 | 4.87 | | | 235.27 | | |
+ | 106 | 2019-04-17 | 50.00 | 4469.55 | 4.82 | | | 230.45 | | |
+ | 107 | 2019-04-18 | 50.00 | 4424.32 | 4.77 | | | 225.68 | | |
+ | 108 | 2019-04-19 | 50.00 | 4379.05 | 4.73 | | | 220.95 | | |
+ | 109 | 2019-04-20 | 50.00 | 4333.72 | 4.67 | | | 216.28 | | |
+ | 110 | 2019-04-21 | 50.00 | 4288.35 | 4.63 | | | 211.65 | | |
+ | 111 | 2019-04-22 | 50.00 | 4242.93 | 4.58 | | | 207.07 | | |
+ | 112 | 2019-04-23 | 50.00 | 4197.46 | 4.53 | | | 202.54 | | |
+ | 113 | 2019-04-24 | 50.00 | 4151.94 | 4.48 | | | 198.06 | | |
+ | 114 | 2019-04-25 | 50.00 | 4106.38 | 4.44 | | | 193.62 | | |
+ | 115 | 2019-04-26 | 50.00 | 4060.76 | 4.38 | | | 189.24 | | |
+ | 116 | 2019-04-27 | 50.00 | 4015.10 | 4.34 | | | 184.90 | | |
+ | 117 | 2019-04-28 | 50.00 | 3969.38 | 4.28 | | | 180.62 | | |
+ | 118 | 2019-04-29 | 50.00 | 3923.62 | 4.24 | | | 176.38 | | |
+ | 119 | 2019-04-30 | 50.00 | 3877.81 | 4.19 | | | 172.19 | | |
+ | 120 | 2019-05-01 | 50.00 | 3831.95 | 4.14 | | | 168.05 | | |
+ | 121 | 2019-05-02 | 50.00 | 3786.04 | 4.09 | | | 163.96 | | |
+ | 122 | 2019-05-03 | 50.00 | 3740.09 | 4.05 | | | 159.91 | | |
+ | 123 | 2019-05-04 | 50.00 | 3694.08 | 3.99 | | | 155.92 | | |
+ | 124 | 2019-05-05 | 50.00 | 3648.03 | 3.95 | | | 151.97 | | |
+ | 125 | 2019-05-06 | 50.00 | 3601.92 | 3.89 | | | 148.08 | | |
+ | 126 | 2019-05-07 | 50.00 | 3555.77 | 3.85 | | | 144.23 | | |
+ | 127 | 2019-05-08 | 50.00 | 3509.56 | 3.79 | | | 140.44 | | |
+ | 128 | 2019-05-09 | 50.00 | 3463.31 | 3.75 | | | 136.69 | | |
+ | 129 | 2019-05-10 | 50.00 | 3417.01 | 3.70 | | | 132.99 | | |
+ | 130 | 2019-05-11 | 50.00 | 3370.66 | 3.65 | | | 129.34 | | |
+ | 131 | 2019-05-12 | 50.00 | 3324.26 | 3.60 | | | 125.74 | | |
+ | 132 | 2019-05-13 | 50.00 | 3277.81 | 3.55 | | | 122.19 | | |
+ | 133 | 2019-05-14 | 50.00 | 3231.31 | 3.50 | | | 118.69 | | |
+ | 134 | 2019-05-15 | 50.00 | 3184.76 | 3.45 | | | 115.24 | | |
+ | 135 | 2019-05-16 | 50.00 | 3138.16 | 3.40 | | | 111.84 | | |
+ | 136 | 2019-05-17 | 50.00 | 3091.51 | 3.35 | | | 108.49 | | |
+ | 137 | 2019-05-18 | 50.00 | 3044.81 | 3.30 | | | 105.19 | | |
+ | 138 | 2019-05-19 | 50.00 | 2998.06 | 3.25 | | | 101.94 | | |
+ | 139 | 2019-05-20 | 50.00 | 2951.26 | 3.20 | | | 98.74 | | |
+ | 140 | 2019-05-21 | 50.00 | 2904.42 | 3.16 | | | 95.58 | | |
+ | 141 | 2019-05-22 | 50.00 | 2857.52 | 3.10 | | | 92.48 | | |
+ | 142 | 2019-05-23 | 50.00 | 2810.57 | 3.05 | | | 89.43 | | |
+ | 143 | 2019-05-24 | 50.00 | 2763.57 | 3.00 | | | 86.43 | | |
+ | 144 | 2019-05-25 | 50.00 | 2716.52 | 2.95 | | | 83.48 | | |
+ | 145 | 2019-05-26 | 50.00 | 2669.42 | 2.90 | | | 80.58 | | |
+ | 146 | 2019-05-27 | 50.00 | 2622.27 | 2.85 | | | 77.73 | | |
+ | 147 | 2019-05-28 | 50.00 | 2575.07 | 2.80 | | | 74.93 | | |
+ | 148 | 2019-05-29 | 50.00 | 2527.82 | 2.75 | | | 72.18 | | |
+ | 149 | 2019-05-30 | 50.00 | 2480.52 | 2.70 | | | 69.48 | | |
+ | 150 | 2019-05-31 | 50.00 | 2433.17 | 2.65 | | | 66.83 | | |
+ | 151 | 2019-06-01 | 50.00 | 2385.77 | 2.60 | | | 64.23 | | |
+ | 152 | 2019-06-02 | 50.00 | 2338.31 | 2.54 | | | 61.69 | | |
+ | 153 | 2019-06-03 | 50.00 | 2290.81 | 2.50 | | | 59.19 | | |
+ | 154 | 2019-06-04 | 50.00 | 2243.26 | 2.45 | | | 56.74 | | |
+ | 155 | 2019-06-05 | 50.00 | 2195.65 | 2.39 | | | 54.35 | | |
+ | 156 | 2019-06-06 | 50.00 | 2148.00 | 2.35 | | | 52.00 | | |
+ | 157 | 2019-06-07 | 50.00 | 2100.29 | 2.29 | | | 49.71 | | |
+ | 158 | 2019-06-08 | 50.00 | 2052.53 | 2.24 | | | 47.47 | | |
+ | 159 | 2019-06-09 | 50.00 | 2004.73 | 2.20 | | | 45.27 | | |
+ | 160 | 2019-06-10 | 50.00 | 1956.87 | 2.14 | | | 43.13 | | |
+ | 161 | 2019-06-11 | 50.00 | 1908.96 | 2.09 | | | 41.04 | | |
+ | 162 | 2019-06-12 | 50.00 | 1860.99 | 2.03 | | | 39.01 | | |
+ | 163 | 2019-06-13 | 50.00 | 1812.98 | 1.99 | | | 37.02 | | |
+ | 164 | 2019-06-14 | 50.00 | 1764.92 | 1.94 | | | 35.08 | | |
+ | 165 | 2019-06-15 | 50.00 | 1716.80 | 1.88 | | | 33.20 | | |
+ | 166 | 2019-06-16 | 50.00 | 1668.64 | 1.84 | | | 31.36 | | |
+ | 167 | 2019-06-17 | 50.00 | 1620.42 | 1.78 | | | 29.58 | | |
+ | 168 | 2019-06-18 | 50.00 | 1572.15 | 1.73 | | | 27.85 | | |
+ | 169 | 2019-06-19 | 50.00 | 1523.83 | 1.68 | | | 26.17 | | |
+ | 170 | 2019-06-20 | 50.00 | 1475.45 | 1.62 | | | 24.55 | | |
+ | 171 | 2019-06-21 | 50.00 | 1427.03 | 1.58 | | | 22.97 | | |
+ | 172 | 2019-06-22 | 50.00 | 1378.55 | 1.52 | | | 21.45 | | |
+ | 173 | 2019-06-23 | 50.00 | 1330.02 | 1.47 | | | 19.98 | | |
+ | 174 | 2019-06-24 | 50.00 | 1281.45 | 1.43 | | | 18.55 | | |
+ | 175 | 2019-06-25 | 50.00 | 1232.81 | 1.36 | | | 17.19 | | |
+ | 176 | 2019-06-26 | 50.00 | 1184.13 | 1.32 | | | 15.87 | | |
+ | 177 | 2019-06-27 | 50.00 | 1135.39 | 1.26 | | | 14.61 | | |
+ | 178 | 2019-06-28 | 50.00 | 1086.61 | 1.22 | | | 13.39 | | |
+ | 179 | 2019-06-29 | 50.00 | 1037.77 | 1.16 | | | 12.23 | | |
+ | 180 | 2019-06-30 | 50.00 | 988.88 | 1.11 | | | 11.12 | | |
+ | 181 | 2019-07-01 | 50.00 | 939.93 | 1.05 | | | 10.07 | | |
+ | 182 | 2019-07-02 | 50.00 | 890.93 | 1.00 | | | 9.07 | | |
+ | 183 | 2019-07-03 | 50.00 | 841.89 | 0.96 | | | 8.11 | | |
+ | 184 | 2019-07-04 | 50.00 | 792.79 | 0.90 | | | 7.21 | | |
+ | 185 | 2019-07-05 | 50.00 | 743.63 | 0.84 | | | 6.37 | | |
+ | 186 | 2019-07-06 | 50.00 | 694.43 | 0.80 | | | 5.57 | | |
+ | 187 | 2019-07-07 | 50.00 | 645.17 | 0.74 | | | 4.83 | | |
+ | 188 | 2019-07-08 | 50.00 | 595.86 | 0.69 | | | 4.14 | | |
+ | 189 | 2019-07-09 | 50.00 | 546.49 | 0.63 | | | 3.51 | | |
+ | 190 | 2019-07-10 | 50.00 | 497.08 | 0.59 | | | 2.92 | | |
+ | 191 | 2019-07-11 | 50.00 | 447.61 | 0.53 | | | 2.39 | | |
+ | 192 | 2019-07-12 | 50.00 | 398.08 | 0.47 | | | 1.92 | | |
+ | 193 | 2019-07-13 | 50.00 | 348.51 | 0.43 | | | 1.49 | | |
+ | 194 | 2019-07-14 | 50.00 | 298.88 | 0.37 | | | 1.12 | | |
+ | 195 | 2019-07-15 | 50.00 | 249.20 | 0.32 | | | 0.80 | | |
+ | 196 | 2019-07-16 | 50.00 | 199.47 | 0.27 | | | 0.53 | | |
+ | 197 | 2019-07-17 | 50.00 | 149.68 | 0.21 | | | 0.32 | | |
+ | 198 | 2019-07-18 | 50.00 | 99.84 | 0.16 | | | 0.16 | | |
+ | 199 | 2019-07-19 | 50.00 | 49.95 | 0.11 | | | 0.05 | | |
+ | 200 | 2019-07-20 | 50.00 | 0.00 | 0.05 | | | 0.00 | | |
When Admin rejects the working capital loan on "01 January 2026"
Then Working capital loan rejection was successful
@@ -246,198 +246,198 @@ Feature: WorkingCapitalAmortizationSchedule
| 6 | 2019-01-07 | 50.00 | 8757.01 | 9.39 | | | 942.99 | | |
| 7 | 2019-01-08 | 50.00 | 8716.36 | 9.35 | | | 933.64 | | |
| 8 | 2019-01-09 | 50.00 | 8675.67 | 9.31 | | | 924.33 | | |
- | 9 | 2019-01-10 | 50.00 | 8634.94 | 9.26 | | | 915.07 | | |
- | 10 | 2019-01-11 | 50.00 | 8594.16 | 9.22 | | | 905.85 | | |
- | 11 | 2019-01-12 | 50.00 | 8553.33 | 9.18 | | | 896.67 | | |
- | 12 | 2019-01-13 | 50.00 | 8512.47 | 9.13 | | | 887.54 | | |
- | 13 | 2019-01-14 | 50.00 | 8471.56 | 9.09 | | | 878.45 | | |
- | 14 | 2019-01-15 | 50.00 | 8430.60 | 9.05 | | | 869.40 | | |
- | 15 | 2019-01-16 | 50.00 | 8389.61 | 9.00 | | | 860.40 | | |
- | 16 | 2019-01-17 | 50.00 | 8348.56 | 8.96 | | | 851.44 | | |
- | 17 | 2019-01-18 | 50.00 | 8307.48 | 8.91 | | | 842.53 | | |
- | 18 | 2019-01-19 | 50.00 | 8266.35 | 8.87 | | | 833.66 | | |
- | 19 | 2019-01-20 | 50.00 | 8225.18 | 8.83 | | | 824.83 | | |
- | 20 | 2019-01-21 | 50.00 | 8183.96 | 8.78 | | | 816.05 | | |
- | 21 | 2019-01-22 | 50.00 | 8142.70 | 8.74 | | | 807.31 | | |
- | 22 | 2019-01-23 | 50.00 | 8101.39 | 8.69 | | | 798.62 | | |
- | 23 | 2019-01-24 | 50.00 | 8060.04 | 8.65 | | | 789.97 | | |
- | 24 | 2019-01-25 | 50.00 | 8018.65 | 8.61 | | | 781.36 | | |
- | 25 | 2019-01-26 | 50.00 | 7977.21 | 8.56 | | | 772.80 | | |
- | 26 | 2019-01-27 | 50.00 | 7935.73 | 8.52 | | | 764.28 | | |
- | 27 | 2019-01-28 | 50.00 | 7894.21 | 8.47 | | | 755.81 | | |
- | 28 | 2019-01-29 | 50.00 | 7852.63 | 8.43 | | | 747.38 | | |
- | 29 | 2019-01-30 | 50.00 | 7811.02 | 8.39 | | | 738.99 | | |
- | 30 | 2019-01-31 | 50.00 | 7769.36 | 8.34 | | | 730.65 | | |
- | 31 | 2019-02-01 | 50.00 | 7727.66 | 8.30 | | | 722.35 | | |
- | 32 | 2019-02-02 | 50.00 | 7685.91 | 8.25 | | | 714.10 | | |
- | 33 | 2019-02-03 | 50.00 | 7644.12 | 8.21 | | | 705.89 | | |
- | 34 | 2019-02-04 | 50.00 | 7602.28 | 8.16 | | | 697.73 | | |
- | 35 | 2019-02-05 | 50.00 | 7560.40 | 8.12 | | | 689.61 | | |
- | 36 | 2019-02-06 | 50.00 | 7518.47 | 8.07 | | | 681.54 | | |
- | 37 | 2019-02-07 | 50.00 | 7476.50 | 8.03 | | | 673.51 | | |
- | 38 | 2019-02-08 | 50.00 | 7434.48 | 7.98 | | | 665.53 | | |
- | 39 | 2019-02-09 | 50.00 | 7392.42 | 7.94 | | | 657.59 | | |
- | 40 | 2019-02-10 | 50.00 | 7350.31 | 7.89 | | | 649.70 | | |
- | 41 | 2019-02-11 | 50.00 | 7308.16 | 7.85 | | | 641.85 | | |
- | 42 | 2019-02-12 | 50.00 | 7265.97 | 7.80 | | | 634.05 | | |
- | 43 | 2019-02-13 | 50.00 | 7223.72 | 7.76 | | | 626.29 | | |
- | 44 | 2019-02-14 | 50.00 | 7181.44 | 7.71 | | | 618.58 | | |
- | 45 | 2019-02-15 | 50.00 | 7139.11 | 7.67 | | | 610.91 | | |
- | 46 | 2019-02-16 | 50.00 | 7096.73 | 7.62 | | | 603.29 | | |
- | 47 | 2019-02-17 | 50.00 | 7054.31 | 7.58 | | | 595.71 | | |
- | 48 | 2019-02-18 | 50.00 | 7011.84 | 7.53 | | | 588.18 | | |
- | 49 | 2019-02-19 | 50.00 | 6969.33 | 7.49 | | | 580.69 | | |
- | 50 | 2019-02-20 | 50.00 | 6926.77 | 7.44 | | | 573.25 | | |
- | 51 | 2019-02-21 | 50.00 | 6884.17 | 7.40 | | | 565.85 | | |
- | 52 | 2019-02-22 | 50.00 | 6841.52 | 7.35 | | | 558.50 | | |
- | 53 | 2019-02-23 | 50.00 | 6798.82 | 7.31 | | | 551.19 | | |
- | 54 | 2019-02-24 | 50.00 | 6756.08 | 7.26 | | | 543.93 | | |
- | 55 | 2019-02-25 | 50.00 | 6713.30 | 7.21 | | | 536.72 | | |
- | 56 | 2019-02-26 | 50.00 | 6670.47 | 7.17 | | | 529.55 | | |
- | 57 | 2019-02-27 | 50.00 | 6627.59 | 7.12 | | | 522.43 | | |
- | 58 | 2019-02-28 | 50.00 | 6584.67 | 7.08 | | | 515.35 | | |
- | 59 | 2019-03-01 | 50.00 | 6541.70 | 7.03 | | | 508.32 | | |
- | 60 | 2019-03-02 | 50.00 | 6498.68 | 6.99 | | | 501.33 | | |
- | 61 | 2019-03-03 | 50.00 | 6455.62 | 6.94 | | | 494.39 | | |
- | 62 | 2019-03-04 | 50.00 | 6412.51 | 6.89 | | | 487.50 | | |
- | 63 | 2019-03-05 | 50.00 | 6369.36 | 6.85 | | | 480.65 | | |
- | 64 | 2019-03-06 | 50.00 | 6326.16 | 6.80 | | | 473.85 | | |
- | 65 | 2019-03-07 | 50.00 | 6282.92 | 6.76 | | | 467.09 | | |
- | 66 | 2019-03-08 | 50.00 | 6239.63 | 6.71 | | | 460.38 | | |
- | 67 | 2019-03-09 | 50.00 | 6196.29 | 6.66 | | | 453.72 | | |
- | 68 | 2019-03-10 | 50.00 | 6152.91 | 6.62 | | | 447.10 | | |
- | 69 | 2019-03-11 | 50.00 | 6109.48 | 6.57 | | | 440.53 | | |
- | 70 | 2019-03-12 | 50.00 | 6066.00 | 6.52 | | | 434.01 | | |
- | 71 | 2019-03-13 | 50.00 | 6022.48 | 6.48 | | | 427.53 | | |
- | 72 | 2019-03-14 | 50.00 | 5978.91 | 6.43 | | | 421.10 | | |
- | 73 | 2019-03-15 | 50.00 | 5935.29 | 6.38 | | | 414.72 | | |
- | 74 | 2019-03-16 | 50.00 | 5891.63 | 6.34 | | | 408.38 | | |
- | 75 | 2019-03-17 | 50.00 | 5847.92 | 6.29 | | | 402.09 | | |
- | 76 | 2019-03-18 | 50.00 | 5804.17 | 6.24 | | | 395.85 | | |
- | 77 | 2019-03-19 | 50.00 | 5760.36 | 6.20 | | | 389.65 | | |
- | 78 | 2019-03-20 | 50.00 | 5716.52 | 6.15 | | | 383.50 | | |
- | 79 | 2019-03-21 | 50.00 | 5672.62 | 6.10 | | | 377.40 | | |
- | 80 | 2019-03-22 | 50.00 | 5628.68 | 6.06 | | | 371.34 | | |
- | 81 | 2019-03-23 | 50.00 | 5584.69 | 6.01 | | | 365.33 | | |
- | 82 | 2019-03-24 | 50.00 | 5540.65 | 5.96 | | | 359.37 | | |
- | 83 | 2019-03-25 | 50.00 | 5496.57 | 5.92 | | | 353.45 | | |
- | 84 | 2019-03-26 | 50.00 | 5452.44 | 5.87 | | | 347.58 | | |
- | 85 | 2019-03-27 | 50.00 | 5408.26 | 5.82 | | | 341.76 | | |
- | 86 | 2019-03-28 | 50.00 | 5364.03 | 5.78 | | | 335.98 | | |
- | 87 | 2019-03-29 | 50.00 | 5319.76 | 5.73 | | | 330.25 | | |
- | 88 | 2019-03-30 | 50.00 | 5275.44 | 5.68 | | | 324.57 | | |
- | 89 | 2019-03-31 | 50.00 | 5231.08 | 5.63 | | | 318.94 | | |
- | 90 | 2019-04-01 | 50.00 | 5186.66 | 5.59 | | | 313.35 | | |
- | 91 | 2019-04-02 | 50.00 | 5142.20 | 5.54 | | | 307.81 | | |
- | 92 | 2019-04-03 | 50.00 | 5097.69 | 5.49 | | | 302.32 | | |
- | 93 | 2019-04-04 | 50.00 | 5053.13 | 5.44 | | | 296.88 | | |
- | 94 | 2019-04-05 | 50.00 | 5008.53 | 5.40 | | | 291.48 | | |
- | 95 | 2019-04-06 | 50.00 | 4963.88 | 5.35 | | | 286.13 | | |
- | 96 | 2019-04-07 | 50.00 | 4919.18 | 5.30 | | | 280.83 | | |
- | 97 | 2019-04-08 | 50.00 | 4874.43 | 5.25 | | | 275.58 | | |
- | 98 | 2019-04-09 | 50.00 | 4829.64 | 5.20 | | | 270.38 | | |
- | 99 | 2019-04-10 | 50.00 | 4784.79 | 5.16 | | | 265.22 | | |
- | 100 | 2019-04-11 | 50.00 | 4739.90 | 5.11 | | | 260.11 | | |
- | 101 | 2019-04-12 | 50.00 | 4694.96 | 5.06 | | | 255.05 | | |
- | 102 | 2019-04-13 | 50.00 | 4649.98 | 5.01 | | | 250.04 | | |
- | 103 | 2019-04-14 | 50.00 | 4604.94 | 4.97 | | | 245.07 | | |
- | 104 | 2019-04-15 | 50.00 | 4559.86 | 4.92 | | | 240.15 | | |
- | 105 | 2019-04-16 | 50.00 | 4514.73 | 4.87 | | | 235.28 | | |
- | 106 | 2019-04-17 | 50.00 | 4469.55 | 4.82 | | | 230.46 | | |
- | 107 | 2019-04-18 | 50.00 | 4424.32 | 4.77 | | | 225.69 | | |
- | 108 | 2019-04-19 | 50.00 | 4379.05 | 4.72 | | | 220.97 | | |
- | 109 | 2019-04-20 | 50.00 | 4333.72 | 4.68 | | | 216.29 | | |
- | 110 | 2019-04-21 | 50.00 | 4288.35 | 4.63 | | | 211.66 | | |
- | 111 | 2019-04-22 | 50.00 | 4242.93 | 4.58 | | | 207.08 | | |
- | 112 | 2019-04-23 | 50.00 | 4197.46 | 4.53 | | | 202.55 | | |
- | 113 | 2019-04-24 | 50.00 | 4151.94 | 4.48 | | | 198.07 | | |
- | 114 | 2019-04-25 | 50.00 | 4106.38 | 4.43 | | | 193.64 | | |
- | 115 | 2019-04-26 | 50.00 | 4060.76 | 4.38 | | | 189.26 | | |
- | 116 | 2019-04-27 | 50.00 | 4015.10 | 4.34 | | | 184.92 | | |
- | 117 | 2019-04-28 | 50.00 | 3969.38 | 4.29 | | | 180.63 | | |
- | 118 | 2019-04-29 | 50.00 | 3923.62 | 4.24 | | | 176.39 | | |
- | 119 | 2019-04-30 | 50.00 | 3877.81 | 4.19 | | | 172.20 | | |
- | 120 | 2019-05-01 | 50.00 | 3831.95 | 4.14 | | | 168.06 | | |
- | 121 | 2019-05-02 | 50.00 | 3786.04 | 4.09 | | | 163.97 | | |
- | 122 | 2019-05-03 | 50.00 | 3740.09 | 4.04 | | | 159.93 | | |
- | 123 | 2019-05-04 | 50.00 | 3694.08 | 3.99 | | | 155.94 | | |
- | 124 | 2019-05-05 | 50.00 | 3648.03 | 3.94 | | | 152.00 | | |
- | 125 | 2019-05-06 | 50.00 | 3601.92 | 3.90 | | | 148.10 | | |
- | 126 | 2019-05-07 | 50.00 | 3555.77 | 3.85 | | | 144.25 | | |
- | 127 | 2019-05-08 | 50.00 | 3509.56 | 3.80 | | | 140.45 | | |
- | 128 | 2019-05-09 | 50.00 | 3463.31 | 3.75 | | | 136.70 | | |
- | 129 | 2019-05-10 | 50.00 | 3417.01 | 3.70 | | | 133.00 | | |
- | 130 | 2019-05-11 | 50.00 | 3370.66 | 3.65 | | | 129.35 | | |
- | 131 | 2019-05-12 | 50.00 | 3324.26 | 3.60 | | | 125.75 | | |
- | 132 | 2019-05-13 | 50.00 | 3277.81 | 3.55 | | | 122.20 | | |
- | 133 | 2019-05-14 | 50.00 | 3231.31 | 3.50 | | | 118.70 | | |
- | 134 | 2019-05-15 | 50.00 | 3184.76 | 3.45 | | | 115.25 | | |
- | 135 | 2019-05-16 | 50.00 | 3138.16 | 3.40 | | | 111.85 | | |
- | 136 | 2019-05-17 | 50.00 | 3091.51 | 3.35 | | | 108.50 | | |
- | 137 | 2019-05-18 | 50.00 | 3044.81 | 3.30 | | | 105.20 | | |
- | 138 | 2019-05-19 | 50.00 | 2998.06 | 3.25 | | | 101.95 | | |
- | 139 | 2019-05-20 | 50.00 | 2951.26 | 3.20 | | | 98.75 | | |
- | 140 | 2019-05-21 | 50.00 | 2904.42 | 3.15 | | | 95.60 | | |
- | 141 | 2019-05-22 | 50.00 | 2857.52 | 3.10 | | | 92.50 | | |
- | 142 | 2019-05-23 | 50.00 | 2810.57 | 3.05 | | | 89.45 | | |
- | 143 | 2019-05-24 | 50.00 | 2763.57 | 3.00 | | | 86.45 | | |
- | 144 | 2019-05-25 | 50.00 | 2716.52 | 2.95 | | | 83.50 | | |
- | 145 | 2019-05-26 | 50.00 | 2669.42 | 2.90 | | | 80.60 | | |
- | 146 | 2019-05-27 | 50.00 | 2622.27 | 2.85 | | | 77.75 | | |
- | 147 | 2019-05-28 | 50.00 | 2575.07 | 2.80 | | | 74.95 | | |
- | 148 | 2019-05-29 | 50.00 | 2527.82 | 2.75 | | | 72.20 | | |
- | 149 | 2019-05-30 | 50.00 | 2480.52 | 2.70 | | | 69.50 | | |
- | 150 | 2019-05-31 | 50.00 | 2433.17 | 2.65 | | | 66.85 | | |
- | 151 | 2019-06-01 | 50.00 | 2385.77 | 2.60 | | | 64.25 | | |
- | 152 | 2019-06-02 | 50.00 | 2338.31 | 2.55 | | | 61.70 | | |
- | 153 | 2019-06-03 | 50.00 | 2290.81 | 2.50 | | | 59.20 | | |
- | 154 | 2019-06-04 | 50.00 | 2243.26 | 2.45 | | | 56.75 | | |
- | 155 | 2019-06-05 | 50.00 | 2195.65 | 2.40 | | | 54.35 | | |
- | 156 | 2019-06-06 | 50.00 | 2148.00 | 2.34 | | | 52.01 | | |
- | 157 | 2019-06-07 | 50.00 | 2100.29 | 2.29 | | | 49.72 | | |
- | 158 | 2019-06-08 | 50.00 | 2052.53 | 2.24 | | | 47.48 | | |
- | 159 | 2019-06-09 | 50.00 | 2004.73 | 2.19 | | | 45.29 | | |
- | 160 | 2019-06-10 | 50.00 | 1956.87 | 2.14 | | | 43.15 | | |
- | 161 | 2019-06-11 | 50.00 | 1908.96 | 2.09 | | | 41.06 | | |
- | 162 | 2019-06-12 | 50.00 | 1860.99 | 2.04 | | | 39.02 | | |
- | 163 | 2019-06-13 | 50.00 | 1812.98 | 1.99 | | | 37.03 | | |
- | 164 | 2019-06-14 | 50.00 | 1764.92 | 1.94 | | | 35.09 | | |
- | 165 | 2019-06-15 | 50.00 | 1716.80 | 1.88 | | | 33.21 | | |
- | 166 | 2019-06-16 | 50.00 | 1668.64 | 1.83 | | | 31.38 | | |
- | 167 | 2019-06-17 | 50.00 | 1620.42 | 1.78 | | | 29.60 | | |
- | 168 | 2019-06-18 | 50.00 | 1572.15 | 1.73 | | | 27.87 | | |
- | 169 | 2019-06-19 | 50.00 | 1523.83 | 1.68 | | | 26.19 | | |
- | 170 | 2019-06-20 | 50.00 | 1475.45 | 1.63 | | | 24.56 | | |
- | 171 | 2019-06-21 | 50.00 | 1427.03 | 1.58 | | | 22.98 | | |
- | 172 | 2019-06-22 | 50.00 | 1378.55 | 1.52 | | | 21.46 | | |
- | 173 | 2019-06-23 | 50.00 | 1330.02 | 1.47 | | | 19.99 | | |
- | 174 | 2019-06-24 | 50.00 | 1281.45 | 1.42 | | | 18.57 | | |
- | 175 | 2019-06-25 | 50.00 | 1232.81 | 1.37 | | | 17.20 | | |
- | 176 | 2019-06-26 | 50.00 | 1184.13 | 1.32 | | | 15.88 | | |
- | 177 | 2019-06-27 | 50.00 | 1135.39 | 1.26 | | | 14.62 | | |
- | 178 | 2019-06-28 | 50.00 | 1086.61 | 1.21 | | | 13.41 | | |
- | 179 | 2019-06-29 | 50.00 | 1037.77 | 1.16 | | | 12.25 | | |
- | 180 | 2019-06-30 | 50.00 | 988.88 | 1.11 | | | 11.14 | | |
- | 181 | 2019-07-01 | 50.00 | 939.93 | 1.06 | | | 10.08 | | |
- | 182 | 2019-07-02 | 50.00 | 890.93 | 1.00 | | | 9.08 | | |
- | 183 | 2019-07-03 | 50.00 | 841.89 | 0.95 | | | 8.13 | | |
- | 184 | 2019-07-04 | 50.00 | 792.79 | 0.90 | | | 7.23 | | |
- | 185 | 2019-07-05 | 50.00 | 743.63 | 0.85 | | | 6.38 | | |
- | 186 | 2019-07-06 | 50.00 | 694.43 | 0.79 | | | 5.59 | | |
- | 187 | 2019-07-07 | 50.00 | 645.17 | 0.74 | | | 4.85 | | |
- | 188 | 2019-07-08 | 50.00 | 595.86 | 0.69 | | | 4.16 | | |
- | 189 | 2019-07-09 | 50.00 | 546.49 | 0.64 | | | 3.52 | | |
- | 190 | 2019-07-10 | 50.00 | 497.08 | 0.58 | | | 2.94 | | |
- | 191 | 2019-07-11 | 50.00 | 447.61 | 0.53 | | | 2.41 | | |
- | 192 | 2019-07-12 | 50.00 | 398.08 | 0.48 | | | 1.93 | | |
- | 193 | 2019-07-13 | 50.00 | 348.51 | 0.43 | | | 1.50 | | |
- | 194 | 2019-07-14 | 50.00 | 298.88 | 0.37 | | | 1.13 | | |
- | 195 | 2019-07-15 | 50.00 | 249.20 | 0.32 | | | 0.81 | | |
- | 196 | 2019-07-16 | 50.00 | 199.47 | 0.27 | | | 0.54 | | |
- | 197 | 2019-07-17 | 50.00 | 149.68 | 0.21 | | | 0.33 | | |
- | 198 | 2019-07-18 | 50.00 | 99.84 | 0.16 | | | 0.17 | | |
- | 199 | 2019-07-19 | 50.00 | 49.95 | 0.11 | | | 0.06 | | |
- | 200 | 2019-07-20 | 50.00 | 0.00 | 0.06 | | | 0.00 | | |
+ | 9 | 2019-01-10 | 50.00 | 8634.94 | 9.27 | | | 915.06 | | |
+ | 10 | 2019-01-11 | 50.00 | 8594.16 | 9.22 | | | 905.84 | | |
+ | 11 | 2019-01-12 | 50.00 | 8553.33 | 9.17 | | | 896.67 | | |
+ | 12 | 2019-01-13 | 50.00 | 8512.47 | 9.14 | | | 887.53 | | |
+ | 13 | 2019-01-14 | 50.00 | 8471.56 | 9.09 | | | 878.44 | | |
+ | 14 | 2019-01-15 | 50.00 | 8430.60 | 9.04 | | | 869.40 | | |
+ | 15 | 2019-01-16 | 50.00 | 8389.61 | 9.01 | | | 860.39 | | |
+ | 16 | 2019-01-17 | 50.00 | 8348.56 | 8.95 | | | 851.44 | | |
+ | 17 | 2019-01-18 | 50.00 | 8307.48 | 8.92 | | | 842.52 | | |
+ | 18 | 2019-01-19 | 50.00 | 8266.35 | 8.87 | | | 833.65 | | |
+ | 19 | 2019-01-20 | 50.00 | 8225.18 | 8.83 | | | 824.82 | | |
+ | 20 | 2019-01-21 | 50.00 | 8183.96 | 8.78 | | | 816.04 | | |
+ | 21 | 2019-01-22 | 50.00 | 8142.70 | 8.74 | | | 807.30 | | |
+ | 22 | 2019-01-23 | 50.00 | 8101.39 | 8.69 | | | 798.61 | | |
+ | 23 | 2019-01-24 | 50.00 | 8060.04 | 8.65 | | | 789.96 | | |
+ | 24 | 2019-01-25 | 50.00 | 8018.65 | 8.61 | | | 781.35 | | |
+ | 25 | 2019-01-26 | 50.00 | 7977.21 | 8.56 | | | 772.79 | | |
+ | 26 | 2019-01-27 | 50.00 | 7935.73 | 8.52 | | | 764.27 | | |
+ | 27 | 2019-01-28 | 50.00 | 7894.21 | 8.48 | | | 755.79 | | |
+ | 28 | 2019-01-29 | 50.00 | 7852.63 | 8.42 | | | 747.37 | | |
+ | 29 | 2019-01-30 | 50.00 | 7811.02 | 8.39 | | | 738.98 | | |
+ | 30 | 2019-01-31 | 50.00 | 7769.36 | 8.34 | | | 730.64 | | |
+ | 31 | 2019-02-01 | 50.00 | 7727.66 | 8.30 | | | 722.34 | | |
+ | 32 | 2019-02-02 | 50.00 | 7685.91 | 8.25 | | | 714.09 | | |
+ | 33 | 2019-02-03 | 50.00 | 7644.12 | 8.21 | | | 705.88 | | |
+ | 34 | 2019-02-04 | 50.00 | 7602.28 | 8.16 | | | 697.72 | | |
+ | 35 | 2019-02-05 | 50.00 | 7560.40 | 8.12 | | | 689.60 | | |
+ | 36 | 2019-02-06 | 50.00 | 7518.47 | 8.07 | | | 681.53 | | |
+ | 37 | 2019-02-07 | 50.00 | 7476.50 | 8.03 | | | 673.50 | | |
+ | 38 | 2019-02-08 | 50.00 | 7434.48 | 7.98 | | | 665.52 | | |
+ | 39 | 2019-02-09 | 50.00 | 7392.42 | 7.94 | | | 657.58 | | |
+ | 40 | 2019-02-10 | 50.00 | 7350.31 | 7.89 | | | 649.69 | | |
+ | 41 | 2019-02-11 | 50.00 | 7308.16 | 7.85 | | | 641.84 | | |
+ | 42 | 2019-02-12 | 50.00 | 7265.97 | 7.81 | | | 634.03 | | |
+ | 43 | 2019-02-13 | 50.00 | 7223.72 | 7.75 | | | 626.28 | | |
+ | 44 | 2019-02-14 | 50.00 | 7181.44 | 7.72 | | | 618.56 | | |
+ | 45 | 2019-02-15 | 50.00 | 7139.11 | 7.67 | | | 610.89 | | |
+ | 46 | 2019-02-16 | 50.00 | 7096.73 | 7.62 | | | 603.27 | | |
+ | 47 | 2019-02-17 | 50.00 | 7054.31 | 7.58 | | | 595.69 | | |
+ | 48 | 2019-02-18 | 50.00 | 7011.84 | 7.53 | | | 588.16 | | |
+ | 49 | 2019-02-19 | 50.00 | 6969.33 | 7.49 | | | 580.67 | | |
+ | 50 | 2019-02-20 | 50.00 | 6926.77 | 7.44 | | | 573.23 | | |
+ | 51 | 2019-02-21 | 50.00 | 6884.17 | 7.40 | | | 565.83 | | |
+ | 52 | 2019-02-22 | 50.00 | 6841.52 | 7.35 | | | 558.48 | | |
+ | 53 | 2019-02-23 | 50.00 | 6798.82 | 7.30 | | | 551.18 | | |
+ | 54 | 2019-02-24 | 50.00 | 6756.08 | 7.26 | | | 543.92 | | |
+ | 55 | 2019-02-25 | 50.00 | 6713.30 | 7.22 | | | 536.70 | | |
+ | 56 | 2019-02-26 | 50.00 | 6670.47 | 7.17 | | | 529.53 | | |
+ | 57 | 2019-02-27 | 50.00 | 6627.59 | 7.12 | | | 522.41 | | |
+ | 58 | 2019-02-28 | 50.00 | 6584.67 | 7.08 | | | 515.33 | | |
+ | 59 | 2019-03-01 | 50.00 | 6541.70 | 7.03 | | | 508.30 | | |
+ | 60 | 2019-03-02 | 50.00 | 6498.68 | 6.98 | | | 501.32 | | |
+ | 61 | 2019-03-03 | 50.00 | 6455.62 | 6.94 | | | 494.38 | | |
+ | 62 | 2019-03-04 | 50.00 | 6412.51 | 6.89 | | | 487.49 | | |
+ | 63 | 2019-03-05 | 50.00 | 6369.36 | 6.85 | | | 480.64 | | |
+ | 64 | 2019-03-06 | 50.00 | 6326.16 | 6.80 | | | 473.84 | | |
+ | 65 | 2019-03-07 | 50.00 | 6282.92 | 6.76 | | | 467.08 | | |
+ | 66 | 2019-03-08 | 50.00 | 6239.63 | 6.71 | | | 460.37 | | |
+ | 67 | 2019-03-09 | 50.00 | 6196.29 | 6.66 | | | 453.71 | | |
+ | 68 | 2019-03-10 | 50.00 | 6152.91 | 6.62 | | | 447.09 | | |
+ | 69 | 2019-03-11 | 50.00 | 6109.48 | 6.57 | | | 440.52 | | |
+ | 70 | 2019-03-12 | 50.00 | 6066.00 | 6.52 | | | 434.00 | | |
+ | 71 | 2019-03-13 | 50.00 | 6022.48 | 6.48 | | | 427.52 | | |
+ | 72 | 2019-03-14 | 50.00 | 5978.91 | 6.43 | | | 421.09 | | |
+ | 73 | 2019-03-15 | 50.00 | 5935.29 | 6.38 | | | 414.71 | | |
+ | 74 | 2019-03-16 | 50.00 | 5891.63 | 6.34 | | | 408.37 | | |
+ | 75 | 2019-03-17 | 50.00 | 5847.92 | 6.29 | | | 402.08 | | |
+ | 76 | 2019-03-18 | 50.00 | 5804.17 | 6.25 | | | 395.83 | | |
+ | 77 | 2019-03-19 | 50.00 | 5760.36 | 6.19 | | | 389.64 | | |
+ | 78 | 2019-03-20 | 50.00 | 5716.52 | 6.16 | | | 383.48 | | |
+ | 79 | 2019-03-21 | 50.00 | 5672.62 | 6.10 | | | 377.38 | | |
+ | 80 | 2019-03-22 | 50.00 | 5628.68 | 6.06 | | | 371.32 | | |
+ | 81 | 2019-03-23 | 50.00 | 5584.69 | 6.01 | | | 365.31 | | |
+ | 82 | 2019-03-24 | 50.00 | 5540.65 | 5.96 | | | 359.35 | | |
+ | 83 | 2019-03-25 | 50.00 | 5496.57 | 5.92 | | | 353.43 | | |
+ | 84 | 2019-03-26 | 50.00 | 5452.44 | 5.87 | | | 347.56 | | |
+ | 85 | 2019-03-27 | 50.00 | 5408.26 | 5.82 | | | 341.74 | | |
+ | 86 | 2019-03-28 | 50.00 | 5364.03 | 5.77 | | | 335.97 | | |
+ | 87 | 2019-03-29 | 50.00 | 5319.76 | 5.73 | | | 330.24 | | |
+ | 88 | 2019-03-30 | 50.00 | 5275.44 | 5.68 | | | 324.56 | | |
+ | 89 | 2019-03-31 | 50.00 | 5231.08 | 5.64 | | | 318.92 | | |
+ | 90 | 2019-04-01 | 50.00 | 5186.66 | 5.58 | | | 313.34 | | |
+ | 91 | 2019-04-02 | 50.00 | 5142.20 | 5.54 | | | 307.80 | | |
+ | 92 | 2019-04-03 | 50.00 | 5097.69 | 5.49 | | | 302.31 | | |
+ | 93 | 2019-04-04 | 50.00 | 5053.13 | 5.44 | | | 296.87 | | |
+ | 94 | 2019-04-05 | 50.00 | 5008.53 | 5.40 | | | 291.47 | | |
+ | 95 | 2019-04-06 | 50.00 | 4963.88 | 5.35 | | | 286.12 | | |
+ | 96 | 2019-04-07 | 50.00 | 4919.18 | 5.30 | | | 280.82 | | |
+ | 97 | 2019-04-08 | 50.00 | 4874.43 | 5.25 | | | 275.57 | | |
+ | 98 | 2019-04-09 | 50.00 | 4829.64 | 5.21 | | | 270.36 | | |
+ | 99 | 2019-04-10 | 50.00 | 4784.79 | 5.15 | | | 265.21 | | |
+ | 100 | 2019-04-11 | 50.00 | 4739.90 | 5.11 | | | 260.10 | | |
+ | 101 | 2019-04-12 | 50.00 | 4694.96 | 5.06 | | | 255.04 | | |
+ | 102 | 2019-04-13 | 50.00 | 4649.98 | 5.02 | | | 250.02 | | |
+ | 103 | 2019-04-14 | 50.00 | 4604.94 | 4.96 | | | 245.06 | | |
+ | 104 | 2019-04-15 | 50.00 | 4559.86 | 4.92 | | | 240.14 | | |
+ | 105 | 2019-04-16 | 50.00 | 4514.73 | 4.87 | | | 235.27 | | |
+ | 106 | 2019-04-17 | 50.00 | 4469.55 | 4.82 | | | 230.45 | | |
+ | 107 | 2019-04-18 | 50.00 | 4424.32 | 4.77 | | | 225.68 | | |
+ | 108 | 2019-04-19 | 50.00 | 4379.05 | 4.73 | | | 220.95 | | |
+ | 109 | 2019-04-20 | 50.00 | 4333.72 | 4.67 | | | 216.28 | | |
+ | 110 | 2019-04-21 | 50.00 | 4288.35 | 4.63 | | | 211.65 | | |
+ | 111 | 2019-04-22 | 50.00 | 4242.93 | 4.58 | | | 207.07 | | |
+ | 112 | 2019-04-23 | 50.00 | 4197.46 | 4.53 | | | 202.54 | | |
+ | 113 | 2019-04-24 | 50.00 | 4151.94 | 4.48 | | | 198.06 | | |
+ | 114 | 2019-04-25 | 50.00 | 4106.38 | 4.44 | | | 193.62 | | |
+ | 115 | 2019-04-26 | 50.00 | 4060.76 | 4.38 | | | 189.24 | | |
+ | 116 | 2019-04-27 | 50.00 | 4015.10 | 4.34 | | | 184.90 | | |
+ | 117 | 2019-04-28 | 50.00 | 3969.38 | 4.28 | | | 180.62 | | |
+ | 118 | 2019-04-29 | 50.00 | 3923.62 | 4.24 | | | 176.38 | | |
+ | 119 | 2019-04-30 | 50.00 | 3877.81 | 4.19 | | | 172.19 | | |
+ | 120 | 2019-05-01 | 50.00 | 3831.95 | 4.14 | | | 168.05 | | |
+ | 121 | 2019-05-02 | 50.00 | 3786.04 | 4.09 | | | 163.96 | | |
+ | 122 | 2019-05-03 | 50.00 | 3740.09 | 4.05 | | | 159.91 | | |
+ | 123 | 2019-05-04 | 50.00 | 3694.08 | 3.99 | | | 155.92 | | |
+ | 124 | 2019-05-05 | 50.00 | 3648.03 | 3.95 | | | 151.97 | | |
+ | 125 | 2019-05-06 | 50.00 | 3601.92 | 3.89 | | | 148.08 | | |
+ | 126 | 2019-05-07 | 50.00 | 3555.77 | 3.85 | | | 144.23 | | |
+ | 127 | 2019-05-08 | 50.00 | 3509.56 | 3.79 | | | 140.44 | | |
+ | 128 | 2019-05-09 | 50.00 | 3463.31 | 3.75 | | | 136.69 | | |
+ | 129 | 2019-05-10 | 50.00 | 3417.01 | 3.70 | | | 132.99 | | |
+ | 130 | 2019-05-11 | 50.00 | 3370.66 | 3.65 | | | 129.34 | | |
+ | 131 | 2019-05-12 | 50.00 | 3324.26 | 3.60 | | | 125.74 | | |
+ | 132 | 2019-05-13 | 50.00 | 3277.81 | 3.55 | | | 122.19 | | |
+ | 133 | 2019-05-14 | 50.00 | 3231.31 | 3.50 | | | 118.69 | | |
+ | 134 | 2019-05-15 | 50.00 | 3184.76 | 3.45 | | | 115.24 | | |
+ | 135 | 2019-05-16 | 50.00 | 3138.16 | 3.40 | | | 111.84 | | |
+ | 136 | 2019-05-17 | 50.00 | 3091.51 | 3.35 | | | 108.49 | | |
+ | 137 | 2019-05-18 | 50.00 | 3044.81 | 3.30 | | | 105.19 | | |
+ | 138 | 2019-05-19 | 50.00 | 2998.06 | 3.25 | | | 101.94 | | |
+ | 139 | 2019-05-20 | 50.00 | 2951.26 | 3.20 | | | 98.74 | | |
+ | 140 | 2019-05-21 | 50.00 | 2904.42 | 3.16 | | | 95.58 | | |
+ | 141 | 2019-05-22 | 50.00 | 2857.52 | 3.10 | | | 92.48 | | |
+ | 142 | 2019-05-23 | 50.00 | 2810.57 | 3.05 | | | 89.43 | | |
+ | 143 | 2019-05-24 | 50.00 | 2763.57 | 3.00 | | | 86.43 | | |
+ | 144 | 2019-05-25 | 50.00 | 2716.52 | 2.95 | | | 83.48 | | |
+ | 145 | 2019-05-26 | 50.00 | 2669.42 | 2.90 | | | 80.58 | | |
+ | 146 | 2019-05-27 | 50.00 | 2622.27 | 2.85 | | | 77.73 | | |
+ | 147 | 2019-05-28 | 50.00 | 2575.07 | 2.80 | | | 74.93 | | |
+ | 148 | 2019-05-29 | 50.00 | 2527.82 | 2.75 | | | 72.18 | | |
+ | 149 | 2019-05-30 | 50.00 | 2480.52 | 2.70 | | | 69.48 | | |
+ | 150 | 2019-05-31 | 50.00 | 2433.17 | 2.65 | | | 66.83 | | |
+ | 151 | 2019-06-01 | 50.00 | 2385.77 | 2.60 | | | 64.23 | | |
+ | 152 | 2019-06-02 | 50.00 | 2338.31 | 2.54 | | | 61.69 | | |
+ | 153 | 2019-06-03 | 50.00 | 2290.81 | 2.50 | | | 59.19 | | |
+ | 154 | 2019-06-04 | 50.00 | 2243.26 | 2.45 | | | 56.74 | | |
+ | 155 | 2019-06-05 | 50.00 | 2195.65 | 2.39 | | | 54.35 | | |
+ | 156 | 2019-06-06 | 50.00 | 2148.00 | 2.35 | | | 52.00 | | |
+ | 157 | 2019-06-07 | 50.00 | 2100.29 | 2.29 | | | 49.71 | | |
+ | 158 | 2019-06-08 | 50.00 | 2052.53 | 2.24 | | | 47.47 | | |
+ | 159 | 2019-06-09 | 50.00 | 2004.73 | 2.20 | | | 45.27 | | |
+ | 160 | 2019-06-10 | 50.00 | 1956.87 | 2.14 | | | 43.13 | | |
+ | 161 | 2019-06-11 | 50.00 | 1908.96 | 2.09 | | | 41.04 | | |
+ | 162 | 2019-06-12 | 50.00 | 1860.99 | 2.03 | | | 39.01 | | |
+ | 163 | 2019-06-13 | 50.00 | 1812.98 | 1.99 | | | 37.02 | | |
+ | 164 | 2019-06-14 | 50.00 | 1764.92 | 1.94 | | | 35.08 | | |
+ | 165 | 2019-06-15 | 50.00 | 1716.80 | 1.88 | | | 33.20 | | |
+ | 166 | 2019-06-16 | 50.00 | 1668.64 | 1.84 | | | 31.36 | | |
+ | 167 | 2019-06-17 | 50.00 | 1620.42 | 1.78 | | | 29.58 | | |
+ | 168 | 2019-06-18 | 50.00 | 1572.15 | 1.73 | | | 27.85 | | |
+ | 169 | 2019-06-19 | 50.00 | 1523.83 | 1.68 | | | 26.17 | | |
+ | 170 | 2019-06-20 | 50.00 | 1475.45 | 1.62 | | | 24.55 | | |
+ | 171 | 2019-06-21 | 50.00 | 1427.03 | 1.58 | | | 22.97 | | |
+ | 172 | 2019-06-22 | 50.00 | 1378.55 | 1.52 | | | 21.45 | | |
+ | 173 | 2019-06-23 | 50.00 | 1330.02 | 1.47 | | | 19.98 | | |
+ | 174 | 2019-06-24 | 50.00 | 1281.45 | 1.43 | | | 18.55 | | |
+ | 175 | 2019-06-25 | 50.00 | 1232.81 | 1.36 | | | 17.19 | | |
+ | 176 | 2019-06-26 | 50.00 | 1184.13 | 1.32 | | | 15.87 | | |
+ | 177 | 2019-06-27 | 50.00 | 1135.39 | 1.26 | | | 14.61 | | |
+ | 178 | 2019-06-28 | 50.00 | 1086.61 | 1.22 | | | 13.39 | | |
+ | 179 | 2019-06-29 | 50.00 | 1037.77 | 1.16 | | | 12.23 | | |
+ | 180 | 2019-06-30 | 50.00 | 988.88 | 1.11 | | | 11.12 | | |
+ | 181 | 2019-07-01 | 50.00 | 939.93 | 1.05 | | | 10.07 | | |
+ | 182 | 2019-07-02 | 50.00 | 890.93 | 1.00 | | | 9.07 | | |
+ | 183 | 2019-07-03 | 50.00 | 841.89 | 0.96 | | | 8.11 | | |
+ | 184 | 2019-07-04 | 50.00 | 792.79 | 0.90 | | | 7.21 | | |
+ | 185 | 2019-07-05 | 50.00 | 743.63 | 0.84 | | | 6.37 | | |
+ | 186 | 2019-07-06 | 50.00 | 694.43 | 0.80 | | | 5.57 | | |
+ | 187 | 2019-07-07 | 50.00 | 645.17 | 0.74 | | | 4.83 | | |
+ | 188 | 2019-07-08 | 50.00 | 595.86 | 0.69 | | | 4.14 | | |
+ | 189 | 2019-07-09 | 50.00 | 546.49 | 0.63 | | | 3.51 | | |
+ | 190 | 2019-07-10 | 50.00 | 497.08 | 0.59 | | | 2.92 | | |
+ | 191 | 2019-07-11 | 50.00 | 447.61 | 0.53 | | | 2.39 | | |
+ | 192 | 2019-07-12 | 50.00 | 398.08 | 0.47 | | | 1.92 | | |
+ | 193 | 2019-07-13 | 50.00 | 348.51 | 0.43 | | | 1.49 | | |
+ | 194 | 2019-07-14 | 50.00 | 298.88 | 0.37 | | | 1.12 | | |
+ | 195 | 2019-07-15 | 50.00 | 249.20 | 0.32 | | | 0.80 | | |
+ | 196 | 2019-07-16 | 50.00 | 199.47 | 0.27 | | | 0.53 | | |
+ | 197 | 2019-07-17 | 50.00 | 149.68 | 0.21 | | | 0.32 | | |
+ | 198 | 2019-07-18 | 50.00 | 99.84 | 0.16 | | | 0.16 | | |
+ | 199 | 2019-07-19 | 50.00 | 49.95 | 0.11 | | | 0.05 | | |
+ | 200 | 2019-07-20 | 50.00 | 0.00 | 0.05 | | | 0.00 | | |
When Admin sets the business date to "25 January 2019"
And Admin runs inline COB job for Working Capital Loan by loanId
And Admin update Working Capital period payment rate with "17" value
@@ -475,214 +475,214 @@ Feature: WorkingCapitalAmortizationSchedule
| 25 | 2019-01-26 | 47.22 | 8923.68 | 9.04 | | | 981.88 | | |
| 26 | 2019-01-27 | 47.22 | 8885.46 | 9.00 | | | 972.88 | | |
| 27 | 2019-01-28 | 47.22 | 8847.20 | 8.96 | | | 963.92 | | |
- | 28 | 2019-01-29 | 47.22 | 8808.91 | 8.92 | | | 955.00 | | |
- | 29 | 2019-01-30 | 47.22 | 8770.57 | 8.89 | | | 946.11 | | |
+ | 28 | 2019-01-29 | 47.22 | 8808.91 | 8.93 | | | 954.99 | | |
+ | 29 | 2019-01-30 | 47.22 | 8770.57 | 8.88 | | | 946.11 | | |
| 30 | 2019-01-31 | 47.22 | 8732.20 | 8.85 | | | 937.26 | | |
| 31 | 2019-02-01 | 47.22 | 8693.79 | 8.81 | | | 928.45 | | |
| 32 | 2019-02-02 | 47.22 | 8655.34 | 8.77 | | | 919.68 | | |
| 33 | 2019-02-03 | 47.22 | 8616.85 | 8.73 | | | 910.95 | | |
| 34 | 2019-02-04 | 47.22 | 8578.32 | 8.69 | | | 902.26 | | |
| 35 | 2019-02-05 | 47.22 | 8539.75 | 8.65 | | | 893.61 | | |
- | 36 | 2019-02-06 | 47.22 | 8501.15 | 8.61 | | | 885.00 | | |
- | 37 | 2019-02-07 | 47.22 | 8462.50 | 8.58 | | | 876.42 | | |
+ | 36 | 2019-02-06 | 47.22 | 8501.15 | 8.62 | | | 884.99 | | |
+ | 37 | 2019-02-07 | 47.22 | 8462.50 | 8.57 | | | 876.42 | | |
| 38 | 2019-02-08 | 47.22 | 8423.82 | 8.54 | | | 867.88 | | |
- | 39 | 2019-02-09 | 47.22 | 8385.09 | 8.50 | | | 859.38 | | |
- | 40 | 2019-02-10 | 47.22 | 8346.33 | 8.46 | | | 850.92 | | |
- | 41 | 2019-02-11 | 47.22 | 8307.53 | 8.42 | | | 842.50 | | |
- | 42 | 2019-02-12 | 47.22 | 8268.69 | 8.38 | | | 834.12 | | |
- | 43 | 2019-02-13 | 47.22 | 8229.81 | 8.34 | | | 825.78 | | |
- | 44 | 2019-02-14 | 47.22 | 8190.89 | 8.30 | | | 817.48 | | |
- | 45 | 2019-02-15 | 47.22 | 8151.94 | 8.26 | | | 809.22 | | |
+ | 39 | 2019-02-09 | 47.22 | 8385.09 | 8.49 | | | 859.39 | | |
+ | 40 | 2019-02-10 | 47.22 | 8346.33 | 8.46 | | | 850.93 | | |
+ | 41 | 2019-02-11 | 47.22 | 8307.53 | 8.42 | | | 842.51 | | |
+ | 42 | 2019-02-12 | 47.22 | 8268.69 | 8.38 | | | 834.13 | | |
+ | 43 | 2019-02-13 | 47.22 | 8229.81 | 8.34 | | | 825.79 | | |
+ | 44 | 2019-02-14 | 47.22 | 8190.89 | 8.30 | | | 817.49 | | |
+ | 45 | 2019-02-15 | 47.22 | 8151.94 | 8.27 | | | 809.22 | | |
| 46 | 2019-02-16 | 47.22 | 8112.94 | 8.22 | | | 801.00 | | |
| 47 | 2019-02-17 | 47.22 | 8073.90 | 8.18 | | | 792.82 | | |
- | 48 | 2019-02-18 | 47.22 | 8034.83 | 8.14 | | | 784.68 | | |
- | 49 | 2019-02-19 | 47.22 | 7995.71 | 8.10 | | | 776.58 | | |
- | 50 | 2019-02-20 | 47.22 | 7956.56 | 8.07 | | | 768.51 | | |
- | 51 | 2019-02-21 | 47.22 | 7917.36 | 8.03 | | | 760.48 | | |
+ | 48 | 2019-02-18 | 47.22 | 8034.83 | 8.15 | | | 784.67 | | |
+ | 49 | 2019-02-19 | 47.22 | 7995.71 | 8.10 | | | 776.57 | | |
+ | 50 | 2019-02-20 | 47.22 | 7956.56 | 8.07 | | | 768.50 | | |
+ | 51 | 2019-02-21 | 47.22 | 7917.36 | 8.02 | | | 760.48 | | |
| 52 | 2019-02-22 | 47.22 | 7878.13 | 7.99 | | | 752.49 | | |
- | 53 | 2019-02-23 | 47.22 | 7838.85 | 7.95 | | | 744.54 | | |
- | 54 | 2019-02-24 | 47.22 | 7799.54 | 7.91 | | | 736.63 | | |
- | 55 | 2019-02-25 | 47.22 | 7760.19 | 7.87 | | | 728.76 | | |
- | 56 | 2019-02-26 | 47.22 | 7720.80 | 7.83 | | | 720.93 | | |
- | 57 | 2019-02-27 | 47.22 | 7681.36 | 7.79 | | | 713.14 | | |
- | 58 | 2019-02-28 | 47.22 | 7641.89 | 7.75 | | | 705.39 | | |
- | 59 | 2019-03-01 | 47.22 | 7602.38 | 7.71 | | | 697.68 | | |
- | 60 | 2019-03-02 | 47.22 | 7562.83 | 7.67 | | | 690.01 | | |
- | 61 | 2019-03-03 | 47.22 | 7523.24 | 7.63 | | | 682.38 | | |
- | 62 | 2019-03-04 | 47.22 | 7483.61 | 7.59 | | | 674.79 | | |
- | 63 | 2019-03-05 | 47.22 | 7443.94 | 7.55 | | | 667.24 | | |
- | 64 | 2019-03-06 | 47.22 | 7404.22 | 7.51 | | | 659.73 | | |
- | 65 | 2019-03-07 | 47.22 | 7364.47 | 7.47 | | | 652.26 | | |
- | 66 | 2019-03-08 | 47.22 | 7324.68 | 7.43 | | | 644.83 | | |
- | 67 | 2019-03-09 | 47.22 | 7284.85 | 7.39 | | | 637.44 | | |
- | 68 | 2019-03-10 | 47.22 | 7244.98 | 7.35 | | | 630.09 | | |
- | 69 | 2019-03-11 | 47.22 | 7205.07 | 7.31 | | | 622.78 | | |
- | 70 | 2019-03-12 | 47.22 | 7165.11 | 7.27 | | | 615.51 | | |
- | 71 | 2019-03-13 | 47.22 | 7125.12 | 7.23 | | | 608.28 | | |
- | 72 | 2019-03-14 | 47.22 | 7085.09 | 7.19 | | | 601.09 | | |
- | 73 | 2019-03-15 | 47.22 | 7045.02 | 7.15 | | | 593.94 | | |
- | 74 | 2019-03-16 | 47.22 | 7004.90 | 7.11 | | | 586.83 | | |
- | 75 | 2019-03-17 | 47.22 | 6964.75 | 7.07 | | | 579.76 | | |
- | 76 | 2019-03-18 | 47.22 | 6924.55 | 7.03 | | | 572.73 | | |
- | 77 | 2019-03-19 | 47.22 | 6884.32 | 6.98 | | | 565.75 | | |
- | 78 | 2019-03-20 | 47.22 | 6844.04 | 6.94 | | | 558.81 | | |
- | 79 | 2019-03-21 | 47.22 | 6803.73 | 6.90 | | | 551.91 | | |
- | 80 | 2019-03-22 | 47.22 | 6763.37 | 6.86 | | | 545.05 | | |
- | 81 | 2019-03-23 | 47.22 | 6722.97 | 6.82 | | | 538.23 | | |
- | 82 | 2019-03-24 | 47.22 | 6682.53 | 6.78 | | | 531.45 | | |
- | 83 | 2019-03-25 | 47.22 | 6642.05 | 6.74 | | | 524.71 | | |
- | 84 | 2019-03-26 | 47.22 | 6601.53 | 6.70 | | | 518.01 | | |
- | 85 | 2019-03-27 | 47.22 | 6560.97 | 6.66 | | | 511.35 | | |
- | 86 | 2019-03-28 | 47.22 | 6520.37 | 6.62 | | | 504.73 | | |
- | 87 | 2019-03-29 | 47.22 | 6479.73 | 6.58 | | | 498.15 | | |
- | 88 | 2019-03-30 | 47.22 | 6439.04 | 6.54 | | | 491.61 | | |
- | 89 | 2019-03-31 | 47.22 | 6398.32 | 6.50 | | | 485.11 | | |
- | 90 | 2019-04-01 | 47.22 | 6357.55 | 6.45 | | | 478.66 | | |
- | 91 | 2019-04-02 | 47.22 | 6316.74 | 6.41 | | | 472.25 | | |
- | 92 | 2019-04-03 | 47.22 | 6275.90 | 6.37 | | | 465.88 | | |
- | 93 | 2019-04-04 | 47.22 | 6235.01 | 6.33 | | | 459.55 | | |
- | 94 | 2019-04-05 | 47.22 | 6194.08 | 6.29 | | | 453.26 | | |
- | 95 | 2019-04-06 | 47.22 | 6153.10 | 6.25 | | | 447.01 | | |
- | 96 | 2019-04-07 | 47.22 | 6112.09 | 6.21 | | | 440.80 | | |
- | 97 | 2019-04-08 | 47.22 | 6071.04 | 6.17 | | | 434.63 | | |
- | 98 | 2019-04-09 | 47.22 | 6029.94 | 6.12 | | | 428.51 | | |
- | 99 | 2019-04-10 | 47.22 | 5988.80 | 6.08 | | | 422.43 | | |
- | 100 | 2019-04-11 | 47.22 | 5947.62 | 6.04 | | | 416.39 | | |
- | 101 | 2019-04-12 | 47.22 | 5906.40 | 6.00 | | | 410.39 | | |
- | 102 | 2019-04-13 | 47.22 | 5865.14 | 5.96 | | | 404.43 | | |
- | 103 | 2019-04-14 | 47.22 | 5823.84 | 5.92 | | | 398.51 | | |
- | 104 | 2019-04-15 | 47.22 | 5782.49 | 5.87 | | | 392.64 | | |
- | 105 | 2019-04-16 | 47.22 | 5741.10 | 5.83 | | | 386.81 | | |
- | 106 | 2019-04-17 | 47.22 | 5699.67 | 5.79 | | | 381.02 | | |
- | 107 | 2019-04-18 | 47.22 | 5658.20 | 5.75 | | | 375.27 | | |
- | 108 | 2019-04-19 | 47.22 | 5616.69 | 5.71 | | | 369.56 | | |
- | 109 | 2019-04-20 | 47.22 | 5575.14 | 5.67 | | | 363.89 | | |
- | 110 | 2019-04-21 | 47.22 | 5533.54 | 5.62 | | | 358.27 | | |
- | 111 | 2019-04-22 | 47.22 | 5491.90 | 5.58 | | | 352.69 | | |
- | 112 | 2019-04-23 | 47.22 | 5450.22 | 5.54 | | | 347.15 | | |
- | 113 | 2019-04-24 | 47.22 | 5408.50 | 5.50 | | | 341.65 | | |
- | 114 | 2019-04-25 | 47.22 | 5366.74 | 5.46 | | | 336.19 | | |
- | 115 | 2019-04-26 | 47.22 | 5324.93 | 5.41 | | | 330.78 | | |
- | 116 | 2019-04-27 | 47.22 | 5283.08 | 5.37 | | | 325.41 | | |
- | 117 | 2019-04-28 | 47.22 | 5241.19 | 5.33 | | | 320.08 | | |
- | 118 | 2019-04-29 | 47.22 | 5199.26 | 5.29 | | | 314.79 | | |
- | 119 | 2019-04-30 | 47.22 | 5157.28 | 5.24 | | | 309.55 | | |
- | 120 | 2019-05-01 | 47.22 | 5115.26 | 5.20 | | | 304.35 | | |
- | 121 | 2019-05-02 | 47.22 | 5073.20 | 5.16 | | | 299.19 | | |
- | 122 | 2019-05-03 | 47.22 | 5031.10 | 5.12 | | | 294.07 | | |
- | 123 | 2019-05-04 | 47.22 | 4988.95 | 5.07 | | | 289.00 | | |
- | 124 | 2019-05-05 | 47.22 | 4946.77 | 5.03 | | | 283.97 | | |
- | 125 | 2019-05-06 | 47.22 | 4904.54 | 4.99 | | | 278.98 | | |
- | 126 | 2019-05-07 | 47.22 | 4862.26 | 4.95 | | | 274.03 | | |
- | 127 | 2019-05-08 | 47.22 | 4819.95 | 4.90 | | | 269.13 | | |
- | 128 | 2019-05-09 | 47.22 | 4777.59 | 4.86 | | | 264.27 | | |
- | 129 | 2019-05-10 | 47.22 | 4735.19 | 4.82 | | | 259.45 | | |
- | 130 | 2019-05-11 | 47.22 | 4692.75 | 4.78 | | | 254.67 | | |
- | 131 | 2019-05-12 | 47.22 | 4650.26 | 4.73 | | | 249.94 | | |
- | 132 | 2019-05-13 | 47.22 | 4607.73 | 4.69 | | | 245.25 | | |
- | 133 | 2019-05-14 | 47.22 | 4565.16 | 4.65 | | | 240.60 | | |
- | 134 | 2019-05-15 | 47.22 | 4522.54 | 4.60 | | | 236.00 | | |
- | 135 | 2019-05-16 | 47.22 | 4479.88 | 4.56 | | | 231.44 | | |
- | 136 | 2019-05-17 | 47.22 | 4437.18 | 4.52 | | | 226.92 | | |
- | 137 | 2019-05-18 | 47.22 | 4394.44 | 4.48 | | | 222.44 | | |
- | 138 | 2019-05-19 | 47.22 | 4351.65 | 4.43 | | | 218.01 | | |
- | 139 | 2019-05-20 | 47.22 | 4308.82 | 4.39 | | | 213.62 | | |
- | 140 | 2019-05-21 | 47.22 | 4265.95 | 4.35 | | | 209.27 | | |
- | 141 | 2019-05-22 | 47.22 | 4223.03 | 4.30 | | | 204.97 | | |
- | 142 | 2019-05-23 | 47.22 | 4180.07 | 4.26 | | | 200.71 | | |
- | 143 | 2019-05-24 | 47.22 | 4137.07 | 4.22 | | | 196.49 | | |
- | 144 | 2019-05-25 | 47.22 | 4094.02 | 4.17 | | | 192.32 | | |
- | 145 | 2019-05-26 | 47.22 | 4050.93 | 4.13 | | | 188.19 | | |
- | 146 | 2019-05-27 | 47.22 | 4007.80 | 4.09 | | | 184.10 | | |
- | 147 | 2019-05-28 | 47.22 | 3964.62 | 4.04 | | | 180.06 | | |
- | 148 | 2019-05-29 | 47.22 | 3921.40 | 4.00 | | | 176.06 | | |
- | 149 | 2019-05-30 | 47.22 | 3878.13 | 3.96 | | | 172.10 | | |
- | 150 | 2019-05-31 | 47.22 | 3834.82 | 3.91 | | | 168.19 | | |
- | 151 | 2019-06-01 | 47.22 | 3791.47 | 3.87 | | | 164.32 | | |
- | 152 | 2019-06-02 | 47.22 | 3748.08 | 3.82 | | | 160.50 | | |
- | 153 | 2019-06-03 | 47.22 | 3704.64 | 3.78 | | | 156.72 | | |
- | 154 | 2019-06-04 | 47.22 | 3661.15 | 3.74 | | | 152.98 | | |
- | 155 | 2019-06-05 | 47.22 | 3617.63 | 3.69 | | | 149.29 | | |
- | 156 | 2019-06-06 | 47.22 | 3574.06 | 3.65 | | | 145.64 | | |
- | 157 | 2019-06-07 | 47.22 | 3530.44 | 3.61 | | | 142.03 | | |
- | 158 | 2019-06-08 | 47.22 | 3486.78 | 3.56 | | | 138.47 | | |
- | 159 | 2019-06-09 | 47.22 | 3443.08 | 3.52 | | | 134.95 | | |
- | 160 | 2019-06-10 | 47.22 | 3399.33 | 3.47 | | | 131.48 | | |
- | 161 | 2019-06-11 | 47.22 | 3355.54 | 3.43 | | | 128.05 | | |
- | 162 | 2019-06-12 | 47.22 | 3311.71 | 3.38 | | | 124.67 | | |
- | 163 | 2019-06-13 | 47.22 | 3267.83 | 3.34 | | | 121.33 | | |
- | 164 | 2019-06-14 | 47.22 | 3223.90 | 3.30 | | | 118.03 | | |
- | 165 | 2019-06-15 | 47.22 | 3179.94 | 3.25 | | | 114.78 | | |
- | 166 | 2019-06-16 | 47.22 | 3135.92 | 3.21 | | | 111.57 | | |
- | 167 | 2019-06-17 | 47.22 | 3091.87 | 3.16 | | | 108.41 | | |
- | 168 | 2019-06-18 | 47.22 | 3047.77 | 3.12 | | | 105.29 | | |
- | 169 | 2019-06-19 | 47.22 | 3003.62 | 3.07 | | | 102.22 | | |
- | 170 | 2019-06-20 | 47.22 | 2959.43 | 3.03 | | | 99.19 | | |
- | 171 | 2019-06-21 | 47.22 | 2915.19 | 2.99 | | | 96.20 | | |
- | 172 | 2019-06-22 | 47.22 | 2870.92 | 2.94 | | | 93.26 | | |
- | 173 | 2019-06-23 | 47.22 | 2826.59 | 2.90 | | | 90.36 | | |
- | 174 | 2019-06-24 | 47.22 | 2782.22 | 2.85 | | | 87.51 | | |
- | 175 | 2019-06-25 | 47.22 | 2737.81 | 2.81 | | | 84.70 | | |
- | 176 | 2019-06-26 | 47.22 | 2693.35 | 2.76 | | | 81.94 | | |
- | 177 | 2019-06-27 | 47.22 | 2648.85 | 2.72 | | | 79.22 | | |
- | 178 | 2019-06-28 | 47.22 | 2604.30 | 2.67 | | | 76.55 | | |
- | 179 | 2019-06-29 | 47.22 | 2559.71 | 2.63 | | | 73.92 | | |
- | 180 | 2019-06-30 | 47.22 | 2515.07 | 2.58 | | | 71.34 | | |
- | 181 | 2019-07-01 | 47.22 | 2470.38 | 2.54 | | | 68.80 | | |
- | 182 | 2019-07-02 | 47.22 | 2425.66 | 2.49 | | | 66.31 | | |
- | 183 | 2019-07-03 | 47.22 | 2380.88 | 2.45 | | | 63.86 | | |
- | 184 | 2019-07-04 | 47.22 | 2336.07 | 2.40 | | | 61.46 | | |
- | 185 | 2019-07-05 | 47.22 | 2291.20 | 2.36 | | | 59.10 | | |
- | 186 | 2019-07-06 | 47.22 | 2246.29 | 2.31 | | | 56.79 | | |
- | 187 | 2019-07-07 | 47.22 | 2201.34 | 2.27 | | | 54.52 | | |
- | 188 | 2019-07-08 | 47.22 | 2156.34 | 2.22 | | | 52.30 | | |
- | 189 | 2019-07-09 | 47.22 | 2111.29 | 2.18 | | | 50.12 | | |
- | 190 | 2019-07-10 | 47.22 | 2066.20 | 2.13 | | | 47.99 | | |
- | 191 | 2019-07-11 | 47.22 | 2021.07 | 2.08 | | | 45.91 | | |
- | 192 | 2019-07-12 | 47.22 | 1975.89 | 2.04 | | | 43.87 | | |
- | 193 | 2019-07-13 | 47.22 | 1930.66 | 1.99 | | | 41.88 | | |
- | 194 | 2019-07-14 | 47.22 | 1885.39 | 1.95 | | | 39.93 | | |
- | 195 | 2019-07-15 | 47.22 | 1840.07 | 1.90 | | | 38.03 | | |
- | 196 | 2019-07-16 | 47.22 | 1794.70 | 1.86 | | | 36.17 | | |
- | 197 | 2019-07-17 | 47.22 | 1749.30 | 1.81 | | | 34.36 | | |
- | 198 | 2019-07-18 | 47.22 | 1703.84 | 1.76 | | | 32.60 | | |
- | 199 | 2019-07-19 | 47.22 | 1658.34 | 1.72 | | | 30.88 | | |
- | 200 | 2019-07-20 | 47.22 | 1612.79 | 1.67 | | | 29.21 | | |
- | 201 | 2019-07-21 | 47.22 | 1567.20 | 1.63 | | | 27.58 | | |
- | 202 | 2019-07-22 | 47.22 | 1521.56 | 1.58 | | | 26.00 | | |
- | 203 | 2019-07-23 | 47.22 | 1475.87 | 1.53 | | | 24.47 | | |
- | 204 | 2019-07-24 | 47.22 | 1430.14 | 1.49 | | | 22.98 | | |
- | 205 | 2019-07-25 | 47.22 | 1384.37 | 1.44 | | | 21.54 | | |
- | 206 | 2019-07-26 | 47.22 | 1338.54 | 1.40 | | | 20.14 | | |
- | 207 | 2019-07-27 | 47.22 | 1292.67 | 1.35 | | | 18.79 | | |
- | 208 | 2019-07-28 | 47.22 | 1246.76 | 1.30 | | | 17.49 | | |
- | 209 | 2019-07-29 | 47.22 | 1200.79 | 1.26 | | | 16.23 | | |
- | 210 | 2019-07-30 | 47.22 | 1154.78 | 1.21 | | | 15.02 | | |
- | 211 | 2019-07-31 | 47.22 | 1108.73 | 1.16 | | | 13.86 | | |
- | 212 | 2019-08-01 | 47.22 | 1062.63 | 1.12 | | | 12.74 | | |
- | 213 | 2019-08-02 | 47.22 | 1016.48 | 1.07 | | | 11.67 | | |
- | 214 | 2019-08-03 | 47.22 | 970.28 | 1.03 | | | 10.64 | | |
- | 215 | 2019-08-04 | 47.22 | 924.04 | 0.98 | | | 9.66 | | |
- | 216 | 2019-08-05 | 47.22 | 877.76 | 0.93 | | | 8.73 | | |
- | 217 | 2019-08-06 | 47.22 | 831.42 | 0.89 | | | 7.84 | | |
- | 218 | 2019-08-07 | 47.22 | 785.04 | 0.84 | | | 7.00 | | |
- | 219 | 2019-08-08 | 47.22 | 738.61 | 0.79 | | | 6.21 | | |
- | 220 | 2019-08-09 | 47.22 | 692.14 | 0.75 | | | 5.46 | | |
- | 221 | 2019-08-10 | 47.22 | 645.61 | 0.70 | | | 4.76 | | |
- | 222 | 2019-08-11 | 47.22 | 599.05 | 0.65 | | | 4.11 | | |
- | 223 | 2019-08-12 | 47.22 | 552.43 | 0.60 | | | 3.51 | | |
- | 224 | 2019-08-13 | 47.22 | 505.77 | 0.56 | | | 2.95 | | |
- | 225 | 2019-08-14 | 47.22 | 459.06 | 0.51 | | | 2.44 | | |
- | 226 | 2019-08-15 | 47.22 | 412.30 | 0.46 | | | 1.98 | | |
- | 227 | 2019-08-16 | 47.22 | 365.50 | 0.42 | | | 1.56 | | |
- | 228 | 2019-08-17 | 47.22 | 318.65 | 0.37 | | | 1.19 | | |
- | 229 | 2019-08-18 | 47.22 | 271.75 | 0.32 | | | 0.87 | | |
- | 230 | 2019-08-19 | 47.22 | 224.80 | 0.27 | | | 0.60 | | |
- | 231 | 2019-08-20 | 47.22 | 177.81 | 0.23 | | | 0.37 | | |
- | 232 | 2019-08-21 | 47.22 | 130.77 | 0.18 | | | 0.19 | | |
- | 233 | 2019-08-22 | 47.22 | 83.68 | 0.13 | | | 0.06 | | |
- | 234 | 2019-08-23 | 47.22 | 36.54 | 0.06 | | | 0.00 | | |
- | 235 | 2019-08-24 | 36.58 | 0.00 | 0.00 | | | 0.00 | | |
+ | 53 | 2019-02-23 | 47.22 | 7838.85 | 7.94 | | | 744.55 | | |
+ | 54 | 2019-02-24 | 47.22 | 7799.54 | 7.91 | | | 736.64 | | |
+ | 55 | 2019-02-25 | 47.22 | 7760.19 | 7.87 | | | 728.77 | | |
+ | 56 | 2019-02-26 | 47.22 | 7720.80 | 7.83 | | | 720.94 | | |
+ | 57 | 2019-02-27 | 47.22 | 7681.36 | 7.78 | | | 713.16 | | |
+ | 58 | 2019-02-28 | 47.22 | 7641.89 | 7.75 | | | 705.41 | | |
+ | 59 | 2019-03-01 | 47.22 | 7602.38 | 7.71 | | | 697.70 | | |
+ | 60 | 2019-03-02 | 47.22 | 7562.83 | 7.67 | | | 690.03 | | |
+ | 61 | 2019-03-03 | 47.22 | 7523.24 | 7.63 | | | 682.40 | | |
+ | 62 | 2019-03-04 | 47.22 | 7483.61 | 7.59 | | | 674.81 | | |
+ | 63 | 2019-03-05 | 47.22 | 7443.94 | 7.55 | | | 667.26 | | |
+ | 64 | 2019-03-06 | 47.22 | 7404.22 | 7.50 | | | 659.76 | | |
+ | 65 | 2019-03-07 | 47.22 | 7364.47 | 7.47 | | | 652.29 | | |
+ | 66 | 2019-03-08 | 47.22 | 7324.68 | 7.43 | | | 644.86 | | |
+ | 67 | 2019-03-09 | 47.22 | 7284.85 | 7.39 | | | 637.47 | | |
+ | 68 | 2019-03-10 | 47.22 | 7244.98 | 7.35 | | | 630.12 | | |
+ | 69 | 2019-03-11 | 47.22 | 7205.07 | 7.31 | | | 622.81 | | |
+ | 70 | 2019-03-12 | 47.22 | 7165.11 | 7.26 | | | 615.55 | | |
+ | 71 | 2019-03-13 | 47.22 | 7125.12 | 7.23 | | | 608.32 | | |
+ | 72 | 2019-03-14 | 47.22 | 7085.09 | 7.19 | | | 601.13 | | |
+ | 73 | 2019-03-15 | 47.22 | 7045.02 | 7.15 | | | 593.98 | | |
+ | 74 | 2019-03-16 | 47.22 | 7004.90 | 7.10 | | | 586.88 | | |
+ | 75 | 2019-03-17 | 47.22 | 6964.75 | 7.07 | | | 579.81 | | |
+ | 76 | 2019-03-18 | 47.22 | 6924.55 | 7.02 | | | 572.79 | | |
+ | 77 | 2019-03-19 | 47.22 | 6884.32 | 6.99 | | | 565.80 | | |
+ | 78 | 2019-03-20 | 47.22 | 6844.04 | 6.94 | | | 558.86 | | |
+ | 79 | 2019-03-21 | 47.22 | 6803.73 | 6.91 | | | 551.95 | | |
+ | 80 | 2019-03-22 | 47.22 | 6763.37 | 6.86 | | | 545.09 | | |
+ | 81 | 2019-03-23 | 47.22 | 6722.97 | 6.82 | | | 538.27 | | |
+ | 82 | 2019-03-24 | 47.22 | 6682.53 | 6.78 | | | 531.49 | | |
+ | 83 | 2019-03-25 | 47.22 | 6642.05 | 6.74 | | | 524.75 | | |
+ | 84 | 2019-03-26 | 47.22 | 6601.53 | 6.70 | | | 518.05 | | |
+ | 85 | 2019-03-27 | 47.22 | 6560.97 | 6.66 | | | 511.39 | | |
+ | 86 | 2019-03-28 | 47.22 | 6520.37 | 6.62 | | | 504.77 | | |
+ | 87 | 2019-03-29 | 47.22 | 6479.73 | 6.58 | | | 498.19 | | |
+ | 88 | 2019-03-30 | 47.22 | 6439.04 | 6.53 | | | 491.66 | | |
+ | 89 | 2019-03-31 | 47.22 | 6398.32 | 6.50 | | | 485.16 | | |
+ | 90 | 2019-04-01 | 47.22 | 6357.55 | 6.45 | | | 478.71 | | |
+ | 91 | 2019-04-02 | 47.22 | 6316.74 | 6.41 | | | 472.30 | | |
+ | 92 | 2019-04-03 | 47.22 | 6275.90 | 6.38 | | | 465.92 | | |
+ | 93 | 2019-04-04 | 47.22 | 6235.01 | 6.33 | | | 459.59 | | |
+ | 94 | 2019-04-05 | 47.22 | 6194.08 | 6.29 | | | 453.30 | | |
+ | 95 | 2019-04-06 | 47.22 | 6153.10 | 6.24 | | | 447.06 | | |
+ | 96 | 2019-04-07 | 47.22 | 6112.09 | 6.21 | | | 440.85 | | |
+ | 97 | 2019-04-08 | 47.22 | 6071.04 | 6.17 | | | 434.68 | | |
+ | 98 | 2019-04-09 | 47.22 | 6029.94 | 6.12 | | | 428.56 | | |
+ | 99 | 2019-04-10 | 47.22 | 5988.80 | 6.08 | | | 422.48 | | |
+ | 100 | 2019-04-11 | 47.22 | 5947.62 | 6.04 | | | 416.44 | | |
+ | 101 | 2019-04-12 | 47.22 | 5906.40 | 6.00 | | | 410.44 | | |
+ | 102 | 2019-04-13 | 47.22 | 5865.14 | 5.96 | | | 404.48 | | |
+ | 103 | 2019-04-14 | 47.22 | 5823.84 | 5.92 | | | 398.56 | | |
+ | 104 | 2019-04-15 | 47.22 | 5782.49 | 5.87 | | | 392.69 | | |
+ | 105 | 2019-04-16 | 47.22 | 5741.10 | 5.83 | | | 386.86 | | |
+ | 106 | 2019-04-17 | 47.22 | 5699.67 | 5.79 | | | 381.07 | | |
+ | 107 | 2019-04-18 | 47.22 | 5658.20 | 5.75 | | | 375.32 | | |
+ | 108 | 2019-04-19 | 47.22 | 5616.69 | 5.71 | | | 369.61 | | |
+ | 109 | 2019-04-20 | 47.22 | 5575.14 | 5.67 | | | 363.94 | | |
+ | 110 | 2019-04-21 | 47.22 | 5533.54 | 5.62 | | | 358.32 | | |
+ | 111 | 2019-04-22 | 47.22 | 5491.90 | 5.58 | | | 352.74 | | |
+ | 112 | 2019-04-23 | 47.22 | 5450.22 | 5.54 | | | 347.20 | | |
+ | 113 | 2019-04-24 | 47.22 | 5408.50 | 5.50 | | | 341.70 | | |
+ | 114 | 2019-04-25 | 47.22 | 5366.74 | 5.46 | | | 336.24 | | |
+ | 115 | 2019-04-26 | 47.22 | 5324.93 | 5.41 | | | 330.83 | | |
+ | 116 | 2019-04-27 | 47.22 | 5283.08 | 5.37 | | | 325.46 | | |
+ | 117 | 2019-04-28 | 47.22 | 5241.19 | 5.33 | | | 320.13 | | |
+ | 118 | 2019-04-29 | 47.22 | 5199.26 | 5.29 | | | 314.84 | | |
+ | 119 | 2019-04-30 | 47.22 | 5157.28 | 5.24 | | | 309.60 | | |
+ | 120 | 2019-05-01 | 47.22 | 5115.26 | 5.20 | | | 304.40 | | |
+ | 121 | 2019-05-02 | 47.22 | 5073.20 | 5.16 | | | 299.24 | | |
+ | 122 | 2019-05-03 | 47.22 | 5031.10 | 5.12 | | | 294.12 | | |
+ | 123 | 2019-05-04 | 47.22 | 4988.95 | 5.07 | | | 289.05 | | |
+ | 124 | 2019-05-05 | 47.22 | 4946.77 | 5.04 | | | 284.01 | | |
+ | 125 | 2019-05-06 | 47.22 | 4904.54 | 4.99 | | | 279.02 | | |
+ | 126 | 2019-05-07 | 47.22 | 4862.26 | 4.94 | | | 274.08 | | |
+ | 127 | 2019-05-08 | 47.22 | 4819.95 | 4.91 | | | 269.17 | | |
+ | 128 | 2019-05-09 | 47.22 | 4777.59 | 4.86 | | | 264.31 | | |
+ | 129 | 2019-05-10 | 47.22 | 4735.19 | 4.82 | | | 259.49 | | |
+ | 130 | 2019-05-11 | 47.22 | 4692.75 | 4.78 | | | 254.71 | | |
+ | 131 | 2019-05-12 | 47.22 | 4650.26 | 4.73 | | | 249.98 | | |
+ | 132 | 2019-05-13 | 47.22 | 4607.73 | 4.69 | | | 245.29 | | |
+ | 133 | 2019-05-14 | 47.22 | 4565.16 | 4.65 | | | 240.64 | | |
+ | 134 | 2019-05-15 | 47.22 | 4522.54 | 4.60 | | | 236.04 | | |
+ | 135 | 2019-05-16 | 47.22 | 4479.88 | 4.56 | | | 231.48 | | |
+ | 136 | 2019-05-17 | 47.22 | 4437.18 | 4.52 | | | 226.96 | | |
+ | 137 | 2019-05-18 | 47.22 | 4394.44 | 4.48 | | | 222.48 | | |
+ | 138 | 2019-05-19 | 47.22 | 4351.65 | 4.43 | | | 218.05 | | |
+ | 139 | 2019-05-20 | 47.22 | 4308.82 | 4.39 | | | 213.66 | | |
+ | 140 | 2019-05-21 | 47.22 | 4265.95 | 4.35 | | | 209.31 | | |
+ | 141 | 2019-05-22 | 47.22 | 4223.03 | 4.30 | | | 205.01 | | |
+ | 142 | 2019-05-23 | 47.22 | 4180.07 | 4.26 | | | 200.75 | | |
+ | 143 | 2019-05-24 | 47.22 | 4137.07 | 4.22 | | | 196.53 | | |
+ | 144 | 2019-05-25 | 47.22 | 4094.02 | 4.17 | | | 192.36 | | |
+ | 145 | 2019-05-26 | 47.22 | 4050.93 | 4.13 | | | 188.23 | | |
+ | 146 | 2019-05-27 | 47.22 | 4007.80 | 4.09 | | | 184.14 | | |
+ | 147 | 2019-05-28 | 47.22 | 3964.62 | 4.04 | | | 180.10 | | |
+ | 148 | 2019-05-29 | 47.22 | 3921.40 | 4.00 | | | 176.10 | | |
+ | 149 | 2019-05-30 | 47.22 | 3878.13 | 3.95 | | | 172.15 | | |
+ | 150 | 2019-05-31 | 47.22 | 3834.82 | 3.91 | | | 168.24 | | |
+ | 151 | 2019-06-01 | 47.22 | 3791.47 | 3.87 | | | 164.37 | | |
+ | 152 | 2019-06-02 | 47.22 | 3748.08 | 3.83 | | | 160.54 | | |
+ | 153 | 2019-06-03 | 47.22 | 3704.64 | 3.78 | | | 156.76 | | |
+ | 154 | 2019-06-04 | 47.22 | 3661.15 | 3.73 | | | 153.03 | | |
+ | 155 | 2019-06-05 | 47.22 | 3617.63 | 3.70 | | | 149.33 | | |
+ | 156 | 2019-06-06 | 47.22 | 3574.06 | 3.65 | | | 145.68 | | |
+ | 157 | 2019-06-07 | 47.22 | 3530.44 | 3.60 | | | 142.08 | | |
+ | 158 | 2019-06-08 | 47.22 | 3486.78 | 3.56 | | | 138.52 | | |
+ | 159 | 2019-06-09 | 47.22 | 3443.08 | 3.52 | | | 135.00 | | |
+ | 160 | 2019-06-10 | 47.22 | 3399.33 | 3.47 | | | 131.53 | | |
+ | 161 | 2019-06-11 | 47.22 | 3355.54 | 3.43 | | | 128.10 | | |
+ | 162 | 2019-06-12 | 47.22 | 3311.71 | 3.39 | | | 124.71 | | |
+ | 163 | 2019-06-13 | 47.22 | 3267.83 | 3.34 | | | 121.37 | | |
+ | 164 | 2019-06-14 | 47.22 | 3223.90 | 3.29 | | | 118.08 | | |
+ | 165 | 2019-06-15 | 47.22 | 3179.94 | 3.26 | | | 114.82 | | |
+ | 166 | 2019-06-16 | 47.22 | 3135.92 | 3.20 | | | 111.62 | | |
+ | 167 | 2019-06-17 | 47.22 | 3091.87 | 3.17 | | | 108.45 | | |
+ | 168 | 2019-06-18 | 47.22 | 3047.77 | 3.12 | | | 105.33 | | |
+ | 169 | 2019-06-19 | 47.22 | 3003.62 | 3.07 | | | 102.26 | | |
+ | 170 | 2019-06-20 | 47.22 | 2959.43 | 3.03 | | | 99.23 | | |
+ | 171 | 2019-06-21 | 47.22 | 2915.19 | 2.98 | | | 96.25 | | |
+ | 172 | 2019-06-22 | 47.22 | 2870.92 | 2.95 | | | 93.30 | | |
+ | 173 | 2019-06-23 | 47.22 | 2826.59 | 2.89 | | | 90.41 | | |
+ | 174 | 2019-06-24 | 47.22 | 2782.22 | 2.85 | | | 87.56 | | |
+ | 175 | 2019-06-25 | 47.22 | 2737.81 | 2.81 | | | 84.75 | | |
+ | 176 | 2019-06-26 | 47.22 | 2693.35 | 2.76 | | | 81.99 | | |
+ | 177 | 2019-06-27 | 47.22 | 2648.85 | 2.72 | | | 79.27 | | |
+ | 178 | 2019-06-28 | 47.22 | 2604.30 | 2.67 | | | 76.60 | | |
+ | 179 | 2019-06-29 | 47.22 | 2559.71 | 2.63 | | | 73.97 | | |
+ | 180 | 2019-06-30 | 47.22 | 2515.07 | 2.58 | | | 71.39 | | |
+ | 181 | 2019-07-01 | 47.22 | 2470.38 | 2.53 | | | 68.86 | | |
+ | 182 | 2019-07-02 | 47.22 | 2425.66 | 2.50 | | | 66.36 | | |
+ | 183 | 2019-07-03 | 47.22 | 2380.88 | 2.44 | | | 63.92 | | |
+ | 184 | 2019-07-04 | 47.22 | 2336.07 | 2.41 | | | 61.51 | | |
+ | 185 | 2019-07-05 | 47.22 | 2291.20 | 2.35 | | | 59.16 | | |
+ | 186 | 2019-07-06 | 47.22 | 2246.29 | 2.31 | | | 56.85 | | |
+ | 187 | 2019-07-07 | 47.22 | 2201.34 | 2.27 | | | 54.58 | | |
+ | 188 | 2019-07-08 | 47.22 | 2156.34 | 2.22 | | | 52.36 | | |
+ | 189 | 2019-07-09 | 47.22 | 2111.29 | 2.17 | | | 50.19 | | |
+ | 190 | 2019-07-10 | 47.22 | 2066.20 | 2.13 | | | 48.06 | | |
+ | 191 | 2019-07-11 | 47.22 | 2021.07 | 2.09 | | | 45.97 | | |
+ | 192 | 2019-07-12 | 47.22 | 1975.89 | 2.04 | | | 43.93 | | |
+ | 193 | 2019-07-13 | 47.22 | 1930.66 | 1.99 | | | 41.94 | | |
+ | 194 | 2019-07-14 | 47.22 | 1885.39 | 1.95 | | | 39.99 | | |
+ | 195 | 2019-07-15 | 47.22 | 1840.07 | 1.90 | | | 38.09 | | |
+ | 196 | 2019-07-16 | 47.22 | 1794.70 | 1.85 | | | 36.24 | | |
+ | 197 | 2019-07-17 | 47.22 | 1749.30 | 1.82 | | | 34.42 | | |
+ | 198 | 2019-07-18 | 47.22 | 1703.84 | 1.76 | | | 32.66 | | |
+ | 199 | 2019-07-19 | 47.22 | 1658.34 | 1.72 | | | 30.94 | | |
+ | 200 | 2019-07-20 | 47.22 | 1612.79 | 1.67 | | | 29.27 | | |
+ | 201 | 2019-07-21 | 47.22 | 1567.20 | 1.63 | | | 27.64 | | |
+ | 202 | 2019-07-22 | 47.22 | 1521.56 | 1.58 | | | 26.06 | | |
+ | 203 | 2019-07-23 | 47.22 | 1475.87 | 1.53 | | | 24.53 | | |
+ | 204 | 2019-07-24 | 47.22 | 1430.14 | 1.49 | | | 23.04 | | |
+ | 205 | 2019-07-25 | 47.22 | 1384.37 | 1.45 | | | 21.59 | | |
+ | 206 | 2019-07-26 | 47.22 | 1338.54 | 1.39 | | | 20.20 | | |
+ | 207 | 2019-07-27 | 47.22 | 1292.67 | 1.35 | | | 18.85 | | |
+ | 208 | 2019-07-28 | 47.22 | 1246.76 | 1.31 | | | 17.54 | | |
+ | 209 | 2019-07-29 | 47.22 | 1200.79 | 1.25 | | | 16.29 | | |
+ | 210 | 2019-07-30 | 47.22 | 1154.78 | 1.21 | | | 15.08 | | |
+ | 211 | 2019-07-31 | 47.22 | 1108.73 | 1.17 | | | 13.91 | | |
+ | 212 | 2019-08-01 | 47.22 | 1062.63 | 1.12 | | | 12.79 | | |
+ | 213 | 2019-08-02 | 47.22 | 1016.48 | 1.07 | | | 11.72 | | |
+ | 214 | 2019-08-03 | 47.22 | 970.28 | 1.02 | | | 10.70 | | |
+ | 215 | 2019-08-04 | 47.22 | 924.04 | 0.98 | | | 9.72 | | |
+ | 216 | 2019-08-05 | 47.22 | 877.76 | 0.94 | | | 8.78 | | |
+ | 217 | 2019-08-06 | 47.22 | 831.42 | 0.88 | | | 7.90 | | |
+ | 218 | 2019-08-07 | 47.22 | 785.04 | 0.84 | | | 7.06 | | |
+ | 219 | 2019-08-08 | 47.22 | 738.61 | 0.79 | | | 6.27 | | |
+ | 220 | 2019-08-09 | 47.22 | 692.14 | 0.75 | | | 5.52 | | |
+ | 221 | 2019-08-10 | 47.22 | 645.61 | 0.69 | | | 4.83 | | |
+ | 222 | 2019-08-11 | 47.22 | 599.05 | 0.66 | | | 4.17 | | |
+ | 223 | 2019-08-12 | 47.22 | 552.43 | 0.60 | | | 3.57 | | |
+ | 224 | 2019-08-13 | 47.22 | 505.77 | 0.56 | | | 3.01 | | |
+ | 225 | 2019-08-14 | 47.22 | 459.06 | 0.51 | | | 2.50 | | |
+ | 226 | 2019-08-15 | 47.22 | 412.30 | 0.46 | | | 2.04 | | |
+ | 227 | 2019-08-16 | 47.22 | 365.50 | 0.42 | | | 1.62 | | |
+ | 228 | 2019-08-17 | 47.22 | 318.65 | 0.37 | | | 1.25 | | |
+ | 229 | 2019-08-18 | 47.22 | 271.75 | 0.32 | | | 0.93 | | |
+ | 230 | 2019-08-19 | 47.22 | 224.80 | 0.27 | | | 0.66 | | |
+ | 231 | 2019-08-20 | 47.22 | 177.81 | 0.23 | | | 0.43 | | |
+ | 232 | 2019-08-21 | 47.22 | 130.77 | 0.18 | | | 0.25 | | |
+ | 233 | 2019-08-22 | 47.22 | 83.68 | 0.13 | | | 0.12 | | |
+ | 234 | 2019-08-23 | 47.22 | 36.54 | 0.08 | | | 0.04 | | |
+ | 235 | 2019-08-24 | 36.58 | 0.00 | 0.04 | | | 0.00 | | |
Then Admin closes the Working Capital loan with a full repayment on "25 January 2019"
@TestRailId:C98194
@@ -705,9 +705,9 @@ Feature: WorkingCapitalAmortizationSchedule
| 1 | 2019-01-02 | 47.22 | 8961.86 | 9.08 | 990.92 |
| 2 | 2019-01-03 | 47.22 | 8923.68 | 9.04 | 981.88 |
| 3 | 2019-01-04 | 47.22 | 8885.46 | 9.00 | 972.88 |
- | 210 | 2019-07-30 | 47.22 | 83.68 | 0.13 | 0.06 |
- | 211 | 2019-07-31 | 47.22 | 36.54 | 0.06 | 0.00 |
- | 212 | 2019-08-01 | 36.58 | 0.00 | 0.00 | 0.00 |
+ | 210 | 2019-07-30 | 47.22 | 83.68 | 0.13 | 0.12 |
+ | 211 | 2019-07-31 | 47.22 | 36.54 | 0.08 | 0.04 |
+ | 212 | 2019-08-01 | 36.58 | 0.00 | 0.04 | 0.00 |
And The retrieved amortization schedule has no negative amounts
And The retrieved amortization schedule expected amortization sums to the discount fee and both expected balances close to zero
When Admin rejects the working capital loan on "01 January 2019"
@@ -749,9 +749,9 @@ Feature: WorkingCapitalAmortizationSchedule
| 30 | 2019-01-31 | 47.22 | 8961.86 | 9.08 | 990.92 |
| 31 | 2019-02-01 | 55.56 | 8955.11 | 10.67 | 989.33 |
| 32 | 2019-02-02 | 55.56 | 8910.17 | 10.62 | 978.71 |
- | 208 | 2019-07-28 | 55.56 | 110.12 | 0.20 | 0.23 |
- | 209 | 2019-07-29 | 55.56 | 54.70 | 0.13 | 0.10 |
- | 210 | 2019-07-30 | 54.76 | 0.00 | 0.10 | 0.00 |
+ | 208 | 2019-07-28 | 55.56 | 110.12 | 0.19 | 0.20 |
+ | 209 | 2019-07-29 | 55.56 | 54.70 | 0.14 | 0.06 |
+ | 210 | 2019-07-30 | 54.76 | 0.00 | 0.06 | 0.00 |
Then Admin closes the Working Capital loan with a full repayment on "01 February 2019"
@TestRailId:C98196
@@ -782,182 +782,182 @@ Feature: WorkingCapitalAmortizationSchedule
| 6 | 2019-01-07 | 50.00 | 8757.01 | 9.39 | | | 942.99 | | |
| 7 | 2019-01-08 | 50.00 | 8716.36 | 9.35 | | | 933.64 | | |
| 8 | 2019-01-09 | 50.00 | 8675.67 | 9.31 | | | 924.33 | | |
- | 9 | 2019-01-10 | 50.00 | 8634.94 | 9.26 | | | 915.07 | | |
- | 10 | 2019-01-11 | 50.00 | 8594.16 | 9.22 | | | 905.85 | | |
- | 11 | 2019-01-12 | 50.00 | 8553.33 | 9.18 | | | 896.67 | | |
- | 12 | 2019-01-13 | 50.00 | 8512.47 | 9.13 | | | 887.54 | | |
- | 13 | 2019-01-14 | 50.00 | 8471.56 | 9.09 | | | 878.45 | | |
- | 14 | 2019-01-15 | 50.00 | 8430.60 | 9.05 | | | 869.40 | | |
- | 15 | 2019-01-16 | 50.00 | 8389.61 | 9.00 | | | 860.40 | | |
- | 16 | 2019-01-17 | 50.00 | 8348.56 | 8.96 | | | 851.44 | | |
- | 17 | 2019-01-18 | 50.00 | 8307.48 | 8.91 | | | 842.53 | | |
- | 18 | 2019-01-19 | 50.00 | 8266.35 | 8.87 | | | 833.66 | | |
- | 19 | 2019-01-20 | 50.00 | 8225.18 | 8.83 | | | 824.83 | | |
- | 20 | 2019-01-21 | 50.00 | 8183.96 | 8.78 | | | 816.05 | | |
- | 21 | 2019-01-22 | 50.00 | 8142.70 | 8.74 | | | 807.31 | | |
- | 22 | 2019-01-23 | 50.00 | 8101.39 | 8.69 | | | 798.62 | | |
- | 23 | 2019-01-24 | 50.00 | 8060.04 | 8.65 | | | 789.97 | | |
- | 24 | 2019-01-25 | 47.22 | 8020.95 | 8.13 | | | 781.84 | | |
- | 25 | 2019-01-26 | 47.22 | 7981.82 | 8.09 | | | 773.75 | | |
- | 26 | 2019-01-27 | 47.22 | 7942.65 | 8.05 | | | 765.70 | | |
- | 27 | 2019-01-28 | 47.22 | 7903.45 | 8.01 | | | 757.69 | | |
- | 28 | 2019-01-29 | 47.22 | 7864.20 | 7.97 | | | 749.72 | | |
- | 29 | 2019-01-30 | 47.22 | 7824.91 | 7.93 | | | 741.79 | | |
- | 30 | 2019-01-31 | 47.22 | 7785.58 | 7.89 | | | 733.90 | | |
- | 31 | 2019-02-01 | 55.56 | 7739.25 | 9.23 | | | 724.67 | | |
- | 32 | 2019-02-02 | 55.56 | 7692.87 | 9.18 | | | 715.49 | | |
- | 33 | 2019-02-03 | 55.56 | 7646.43 | 9.12 | | | 706.37 | | |
- | 34 | 2019-02-04 | 55.56 | 7599.94 | 9.07 | | | 697.30 | | |
- | 35 | 2019-02-05 | 55.56 | 7553.39 | 9.01 | | | 688.29 | | |
- | 36 | 2019-02-06 | 55.56 | 7506.79 | 8.96 | | | 679.33 | | |
- | 37 | 2019-02-07 | 55.56 | 7460.13 | 8.90 | | | 670.43 | | |
- | 38 | 2019-02-08 | 55.56 | 7413.42 | 8.85 | | | 661.58 | | |
- | 39 | 2019-02-09 | 55.56 | 7366.65 | 8.79 | | | 652.79 | | |
- | 40 | 2019-02-10 | 55.56 | 7319.83 | 8.74 | | | 644.05 | | |
- | 41 | 2019-02-11 | 55.56 | 7272.95 | 8.68 | | | 635.37 | | |
- | 42 | 2019-02-12 | 55.56 | 7226.01 | 8.62 | | | 626.75 | | |
- | 43 | 2019-02-13 | 55.56 | 7179.02 | 8.57 | | | 618.18 | | |
- | 44 | 2019-02-14 | 55.56 | 7131.97 | 8.51 | | | 609.67 | | |
- | 45 | 2019-02-15 | 55.56 | 7084.87 | 8.46 | | | 601.21 | | |
- | 46 | 2019-02-16 | 55.56 | 7037.71 | 8.40 | | | 592.81 | | |
- | 47 | 2019-02-17 | 55.56 | 6990.50 | 8.35 | | | 584.46 | | |
- | 48 | 2019-02-18 | 55.56 | 6943.23 | 8.29 | | | 576.17 | | |
- | 49 | 2019-02-19 | 55.56 | 6895.90 | 8.23 | | | 567.94 | | |
- | 50 | 2019-02-20 | 55.56 | 6848.52 | 8.18 | | | 559.76 | | |
- | 51 | 2019-02-21 | 55.56 | 6801.08 | 8.12 | | | 551.64 | | |
- | 52 | 2019-02-22 | 55.56 | 6753.58 | 8.07 | | | 543.57 | | |
- | 53 | 2019-02-23 | 55.56 | 6706.03 | 8.01 | | | 535.56 | | |
- | 54 | 2019-02-24 | 55.56 | 6658.43 | 7.95 | | | 527.61 | | |
- | 55 | 2019-02-25 | 55.56 | 6610.76 | 7.90 | | | 519.71 | | |
- | 56 | 2019-02-26 | 55.56 | 6563.04 | 7.84 | | | 511.87 | | |
- | 57 | 2019-02-27 | 55.56 | 6515.26 | 7.78 | | | 504.09 | | |
- | 58 | 2019-02-28 | 55.56 | 6467.43 | 7.73 | | | 496.36 | | |
- | 59 | 2019-03-01 | 55.56 | 6419.54 | 7.67 | | | 488.69 | | |
- | 60 | 2019-03-02 | 55.56 | 6371.59 | 7.61 | | | 481.08 | | |
- | 61 | 2019-03-03 | 55.56 | 6323.59 | 7.56 | | | 473.52 | | |
- | 62 | 2019-03-04 | 55.56 | 6275.53 | 7.50 | | | 466.02 | | |
- | 63 | 2019-03-05 | 55.56 | 6227.41 | 7.44 | | | 458.58 | | |
- | 64 | 2019-03-06 | 55.56 | 6179.23 | 7.38 | | | 451.20 | | |
- | 65 | 2019-03-07 | 55.56 | 6131.00 | 7.33 | | | 443.87 | | |
- | 66 | 2019-03-08 | 55.56 | 6082.71 | 7.27 | | | 436.60 | | |
- | 67 | 2019-03-09 | 55.56 | 6034.36 | 7.21 | | | 429.39 | | |
- | 68 | 2019-03-10 | 55.56 | 5985.96 | 7.16 | | | 422.23 | | |
- | 69 | 2019-03-11 | 55.56 | 5937.50 | 7.10 | | | 415.13 | | |
- | 70 | 2019-03-12 | 55.56 | 5888.98 | 7.04 | | | 408.09 | | |
- | 71 | 2019-03-13 | 55.56 | 5840.40 | 6.98 | | | 401.11 | | |
- | 72 | 2019-03-14 | 55.56 | 5791.77 | 6.93 | | | 394.18 | | |
- | 73 | 2019-03-15 | 55.56 | 5743.08 | 6.87 | | | 387.31 | | |
- | 74 | 2019-03-16 | 55.56 | 5694.33 | 6.81 | | | 380.50 | | |
- | 75 | 2019-03-17 | 55.56 | 5645.52 | 6.75 | | | 373.75 | | |
- | 76 | 2019-03-18 | 55.56 | 5596.65 | 6.69 | | | 367.06 | | |
- | 77 | 2019-03-19 | 55.56 | 5547.73 | 6.64 | | | 360.42 | | |
- | 78 | 2019-03-20 | 55.56 | 5498.75 | 6.58 | | | 353.84 | | |
- | 79 | 2019-03-21 | 55.56 | 5449.71 | 6.52 | | | 347.32 | | |
- | 80 | 2019-03-22 | 55.56 | 5400.61 | 6.46 | | | 340.86 | | |
- | 81 | 2019-03-23 | 55.56 | 5351.46 | 6.40 | | | 334.46 | | |
- | 82 | 2019-03-24 | 55.56 | 5302.24 | 6.35 | | | 328.11 | | |
- | 83 | 2019-03-25 | 55.56 | 5252.97 | 6.29 | | | 321.82 | | |
- | 84 | 2019-03-26 | 55.56 | 5203.64 | 6.23 | | | 315.59 | | |
- | 85 | 2019-03-27 | 55.56 | 5154.25 | 6.17 | | | 309.42 | | |
- | 86 | 2019-03-28 | 55.56 | 5104.80 | 6.11 | | | 303.31 | | |
- | 87 | 2019-03-29 | 55.56 | 5055.30 | 6.05 | | | 297.26 | | |
- | 88 | 2019-03-30 | 55.56 | 5005.73 | 5.99 | | | 291.27 | | |
- | 89 | 2019-03-31 | 55.56 | 4956.11 | 5.94 | | | 285.33 | | |
- | 90 | 2019-04-01 | 55.56 | 4906.42 | 5.88 | | | 279.45 | | |
- | 91 | 2019-04-02 | 55.56 | 4856.68 | 5.82 | | | 273.63 | | |
- | 92 | 2019-04-03 | 55.56 | 4806.88 | 5.76 | | | 267.87 | | |
- | 93 | 2019-04-04 | 55.56 | 4757.02 | 5.70 | | | 262.17 | | |
- | 94 | 2019-04-05 | 55.56 | 4707.10 | 5.64 | | | 256.53 | | |
- | 95 | 2019-04-06 | 55.56 | 4657.13 | 5.58 | | | 250.95 | | |
- | 96 | 2019-04-07 | 55.56 | 4607.09 | 5.52 | | | 245.43 | | |
- | 97 | 2019-04-08 | 55.56 | 4556.99 | 5.46 | | | 239.97 | | |
- | 98 | 2019-04-09 | 55.56 | 4506.83 | 5.40 | | | 234.57 | | |
- | 99 | 2019-04-10 | 55.56 | 4456.62 | 5.34 | | | 229.23 | | |
- | 100 | 2019-04-11 | 55.56 | 4406.34 | 5.28 | | | 223.95 | | |
- | 101 | 2019-04-12 | 55.56 | 4356.01 | 5.23 | | | 218.72 | | |
- | 102 | 2019-04-13 | 55.56 | 4305.62 | 5.17 | | | 213.55 | | |
- | 103 | 2019-04-14 | 55.56 | 4255.16 | 5.11 | | | 208.44 | | |
- | 104 | 2019-04-15 | 55.56 | 4204.65 | 5.05 | | | 203.39 | | |
- | 105 | 2019-04-16 | 55.56 | 4154.07 | 4.99 | | | 198.40 | | |
- | 106 | 2019-04-17 | 55.56 | 4103.44 | 4.93 | | | 193.47 | | |
- | 107 | 2019-04-18 | 55.56 | 4052.75 | 4.87 | | | 188.60 | | |
- | 108 | 2019-04-19 | 55.56 | 4001.99 | 4.81 | | | 183.79 | | |
- | 109 | 2019-04-20 | 55.56 | 3951.18 | 4.75 | | | 179.04 | | |
- | 110 | 2019-04-21 | 55.56 | 3900.30 | 4.69 | | | 174.35 | | |
- | 111 | 2019-04-22 | 55.56 | 3849.37 | 4.63 | | | 169.72 | | |
- | 112 | 2019-04-23 | 55.56 | 3798.37 | 4.56 | | | 165.16 | | |
- | 113 | 2019-04-24 | 55.56 | 3747.32 | 4.50 | | | 160.66 | | |
- | 114 | 2019-04-25 | 55.56 | 3696.20 | 4.44 | | | 156.22 | | |
- | 115 | 2019-04-26 | 55.56 | 3645.02 | 4.38 | | | 151.84 | | |
- | 116 | 2019-04-27 | 55.56 | 3593.79 | 4.32 | | | 147.52 | | |
- | 117 | 2019-04-28 | 55.56 | 3542.49 | 4.26 | | | 143.26 | | |
- | 118 | 2019-04-29 | 55.56 | 3491.13 | 4.20 | | | 139.06 | | |
- | 119 | 2019-04-30 | 55.56 | 3439.71 | 4.14 | | | 134.92 | | |
- | 120 | 2019-05-01 | 55.56 | 3388.23 | 4.08 | | | 130.84 | | |
- | 121 | 2019-05-02 | 55.56 | 3336.69 | 4.02 | | | 126.82 | | |
- | 122 | 2019-05-03 | 55.56 | 3285.08 | 3.96 | | | 122.86 | | |
- | 123 | 2019-05-04 | 55.56 | 3233.42 | 3.90 | | | 118.96 | | |
- | 124 | 2019-05-05 | 55.56 | 3181.69 | 3.83 | | | 115.13 | | |
- | 125 | 2019-05-06 | 55.56 | 3129.91 | 3.77 | | | 111.36 | | |
- | 126 | 2019-05-07 | 55.56 | 3078.06 | 3.71 | | | 107.65 | | |
- | 127 | 2019-05-08 | 55.56 | 3026.15 | 3.65 | | | 104.00 | | |
- | 128 | 2019-05-09 | 55.56 | 2974.18 | 3.59 | | | 100.41 | | |
- | 129 | 2019-05-10 | 55.56 | 2922.14 | 3.53 | | | 96.88 | | |
- | 130 | 2019-05-11 | 55.56 | 2870.05 | 3.47 | | | 93.41 | | |
- | 131 | 2019-05-12 | 55.56 | 2817.89 | 3.40 | | | 90.01 | | |
- | 132 | 2019-05-13 | 55.56 | 2765.67 | 3.34 | | | 86.67 | | |
- | 133 | 2019-05-14 | 55.56 | 2713.39 | 3.28 | | | 83.39 | | |
- | 134 | 2019-05-15 | 55.56 | 2661.05 | 3.22 | | | 80.17 | | |
- | 135 | 2019-05-16 | 55.56 | 2608.65 | 3.16 | | | 77.01 | | |
- | 136 | 2019-05-17 | 55.56 | 2556.18 | 3.09 | | | 73.92 | | |
- | 137 | 2019-05-18 | 55.56 | 2503.65 | 3.03 | | | 70.89 | | |
- | 138 | 2019-05-19 | 55.56 | 2451.06 | 2.97 | | | 67.92 | | |
- | 139 | 2019-05-20 | 55.56 | 2398.41 | 2.91 | | | 65.01 | | |
- | 140 | 2019-05-21 | 55.56 | 2345.69 | 2.84 | | | 62.17 | | |
- | 141 | 2019-05-22 | 55.56 | 2292.91 | 2.78 | | | 59.39 | | |
- | 142 | 2019-05-23 | 55.56 | 2240.07 | 2.72 | | | 56.67 | | |
- | 143 | 2019-05-24 | 55.56 | 2187.17 | 2.66 | | | 54.01 | | |
- | 144 | 2019-05-25 | 55.56 | 2134.20 | 2.59 | | | 51.42 | | |
- | 145 | 2019-05-26 | 55.56 | 2081.17 | 2.53 | | | 48.89 | | |
- | 146 | 2019-05-27 | 55.56 | 2028.08 | 2.47 | | | 46.42 | | |
- | 147 | 2019-05-28 | 55.56 | 1974.92 | 2.40 | | | 44.02 | | |
- | 148 | 2019-05-29 | 55.56 | 1921.71 | 2.34 | | | 41.68 | | |
- | 149 | 2019-05-30 | 55.56 | 1868.43 | 2.28 | | | 39.40 | | |
- | 150 | 2019-05-31 | 55.56 | 1815.08 | 2.22 | | | 37.18 | | |
- | 151 | 2019-06-01 | 55.56 | 1761.67 | 2.15 | | | 35.03 | | |
- | 152 | 2019-06-02 | 55.56 | 1708.20 | 2.09 | | | 32.94 | | |
- | 153 | 2019-06-03 | 55.56 | 1654.67 | 2.03 | | | 30.91 | | |
- | 154 | 2019-06-04 | 55.56 | 1601.07 | 1.96 | | | 28.95 | | |
- | 155 | 2019-06-05 | 55.56 | 1547.41 | 1.90 | | | 27.05 | | |
- | 156 | 2019-06-06 | 55.56 | 1493.68 | 1.83 | | | 25.22 | | |
- | 157 | 2019-06-07 | 55.56 | 1439.89 | 1.77 | | | 23.45 | | |
- | 158 | 2019-06-08 | 55.56 | 1386.04 | 1.71 | | | 21.74 | | |
- | 159 | 2019-06-09 | 55.56 | 1332.13 | 1.64 | | | 20.10 | | |
- | 160 | 2019-06-10 | 55.56 | 1278.15 | 1.58 | | | 18.52 | | |
- | 161 | 2019-06-11 | 55.56 | 1224.10 | 1.52 | | | 17.00 | | |
- | 162 | 2019-06-12 | 55.56 | 1169.99 | 1.45 | | | 15.55 | | |
- | 163 | 2019-06-13 | 55.56 | 1115.82 | 1.39 | | | 14.16 | | |
- | 164 | 2019-06-14 | 55.56 | 1061.58 | 1.32 | | | 12.84 | | |
- | 165 | 2019-06-15 | 55.56 | 1007.28 | 1.26 | | | 11.58 | | |
- | 166 | 2019-06-16 | 55.56 | 952.92 | 1.19 | | | 10.39 | | |
- | 167 | 2019-06-17 | 55.56 | 898.49 | 1.13 | | | 9.26 | | |
- | 168 | 2019-06-18 | 55.56 | 843.99 | 1.07 | | | 8.19 | | |
- | 169 | 2019-06-19 | 55.56 | 789.43 | 1.00 | | | 7.19 | | |
- | 170 | 2019-06-20 | 55.56 | 734.81 | 0.94 | | | 6.25 | | |
- | 171 | 2019-06-21 | 55.56 | 680.12 | 0.87 | | | 5.38 | | |
- | 172 | 2019-06-22 | 55.56 | 625.37 | 0.81 | | | 4.57 | | |
- | 173 | 2019-06-23 | 55.56 | 570.55 | 0.74 | | | 3.83 | | |
- | 174 | 2019-06-24 | 55.56 | 515.67 | 0.68 | | | 3.15 | | |
- | 175 | 2019-06-25 | 55.56 | 460.72 | 0.61 | | | 2.54 | | |
- | 176 | 2019-06-26 | 55.56 | 405.70 | 0.55 | | | 1.99 | | |
- | 177 | 2019-06-27 | 55.56 | 350.62 | 0.48 | | | 1.51 | | |
- | 178 | 2019-06-28 | 55.56 | 295.48 | 0.42 | | | 1.09 | | |
- | 179 | 2019-06-29 | 55.56 | 240.27 | 0.35 | | | 0.74 | | |
- | 180 | 2019-06-30 | 55.56 | 185.00 | 0.28 | | | 0.46 | | |
- | 181 | 2019-07-01 | 55.56 | 129.66 | 0.22 | | | 0.24 | | |
- | 182 | 2019-07-02 | 55.56 | 74.25 | 0.15 | | | 0.09 | | |
- | 183 | 2019-07-03 | 55.56 | 18.78 | 0.09 | | | 0.00 | | |
- | 184 | 2019-07-04 | 18.80 | 0.00 | 0.00 | | | 0.00 | | |
+ | 9 | 2019-01-10 | 50.00 | 8634.94 | 9.27 | | | 915.06 | | |
+ | 10 | 2019-01-11 | 50.00 | 8594.16 | 9.22 | | | 905.84 | | |
+ | 11 | 2019-01-12 | 50.00 | 8553.33 | 9.17 | | | 896.67 | | |
+ | 12 | 2019-01-13 | 50.00 | 8512.47 | 9.14 | | | 887.53 | | |
+ | 13 | 2019-01-14 | 50.00 | 8471.56 | 9.09 | | | 878.44 | | |
+ | 14 | 2019-01-15 | 50.00 | 8430.60 | 9.04 | | | 869.40 | | |
+ | 15 | 2019-01-16 | 50.00 | 8389.61 | 9.01 | | | 860.39 | | |
+ | 16 | 2019-01-17 | 50.00 | 8348.56 | 8.95 | | | 851.44 | | |
+ | 17 | 2019-01-18 | 50.00 | 8307.48 | 8.92 | | | 842.52 | | |
+ | 18 | 2019-01-19 | 50.00 | 8266.35 | 8.87 | | | 833.65 | | |
+ | 19 | 2019-01-20 | 50.00 | 8225.18 | 8.83 | | | 824.82 | | |
+ | 20 | 2019-01-21 | 50.00 | 8183.96 | 8.78 | | | 816.04 | | |
+ | 21 | 2019-01-22 | 50.00 | 8142.70 | 8.74 | | | 807.30 | | |
+ | 22 | 2019-01-23 | 50.00 | 8101.39 | 8.69 | | | 798.61 | | |
+ | 23 | 2019-01-24 | 50.00 | 8060.04 | 8.65 | | | 789.96 | | |
+ | 24 | 2019-01-25 | 47.22 | 8020.95 | 8.13 | | | 781.83 | | |
+ | 25 | 2019-01-26 | 47.22 | 7981.83 | 8.10 | | | 773.73 | | |
+ | 26 | 2019-01-27 | 47.22 | 7942.66 | 8.05 | | | 765.68 | | |
+ | 27 | 2019-01-28 | 47.22 | 7903.45 | 8.01 | | | 757.67 | | |
+ | 28 | 2019-01-29 | 47.22 | 7864.20 | 7.97 | | | 749.70 | | |
+ | 29 | 2019-01-30 | 47.22 | 7824.91 | 7.93 | | | 741.77 | | |
+ | 30 | 2019-01-31 | 47.22 | 7785.59 | 7.90 | | | 733.87 | | |
+ | 31 | 2019-02-01 | 55.56 | 7739.26 | 9.23 | | | 724.64 | | |
+ | 32 | 2019-02-02 | 55.56 | 7692.88 | 9.18 | | | 715.46 | | |
+ | 33 | 2019-02-03 | 55.56 | 7646.44 | 9.12 | | | 706.34 | | |
+ | 34 | 2019-02-04 | 55.56 | 7599.95 | 9.07 | | | 697.27 | | |
+ | 35 | 2019-02-05 | 55.56 | 7553.40 | 9.01 | | | 688.26 | | |
+ | 36 | 2019-02-06 | 55.56 | 7506.80 | 8.96 | | | 679.30 | | |
+ | 37 | 2019-02-07 | 55.56 | 7460.14 | 8.90 | | | 670.40 | | |
+ | 38 | 2019-02-08 | 55.56 | 7413.42 | 8.84 | | | 661.56 | | |
+ | 39 | 2019-02-09 | 55.56 | 7366.65 | 8.79 | | | 652.77 | | |
+ | 40 | 2019-02-10 | 55.56 | 7319.83 | 8.74 | | | 644.03 | | |
+ | 41 | 2019-02-11 | 55.56 | 7272.95 | 8.68 | | | 635.35 | | |
+ | 42 | 2019-02-12 | 55.56 | 7226.01 | 8.62 | | | 626.73 | | |
+ | 43 | 2019-02-13 | 55.56 | 7179.02 | 8.57 | | | 618.16 | | |
+ | 44 | 2019-02-14 | 55.56 | 7131.98 | 8.52 | | | 609.64 | | |
+ | 45 | 2019-02-15 | 55.56 | 7084.87 | 8.45 | | | 601.19 | | |
+ | 46 | 2019-02-16 | 55.56 | 7037.71 | 8.40 | | | 592.79 | | |
+ | 47 | 2019-02-17 | 55.56 | 6990.50 | 8.35 | | | 584.44 | | |
+ | 48 | 2019-02-18 | 55.56 | 6943.23 | 8.29 | | | 576.15 | | |
+ | 49 | 2019-02-19 | 55.56 | 6895.90 | 8.23 | | | 567.92 | | |
+ | 50 | 2019-02-20 | 55.56 | 6848.52 | 8.18 | | | 559.74 | | |
+ | 51 | 2019-02-21 | 55.56 | 6801.08 | 8.12 | | | 551.62 | | |
+ | 52 | 2019-02-22 | 55.56 | 6753.58 | 8.06 | | | 543.56 | | |
+ | 53 | 2019-02-23 | 55.56 | 6706.03 | 8.01 | | | 535.55 | | |
+ | 54 | 2019-02-24 | 55.56 | 6658.43 | 7.96 | | | 527.59 | | |
+ | 55 | 2019-02-25 | 55.56 | 6610.76 | 7.89 | | | 519.70 | | |
+ | 56 | 2019-02-26 | 55.56 | 6563.04 | 7.84 | | | 511.86 | | |
+ | 57 | 2019-02-27 | 55.56 | 6515.26 | 7.78 | | | 504.08 | | |
+ | 58 | 2019-02-28 | 55.56 | 6467.43 | 7.73 | | | 496.35 | | |
+ | 59 | 2019-03-01 | 55.56 | 6419.54 | 7.67 | | | 488.68 | | |
+ | 60 | 2019-03-02 | 55.56 | 6371.59 | 7.61 | | | 481.07 | | |
+ | 61 | 2019-03-03 | 55.56 | 6323.59 | 7.56 | | | 473.51 | | |
+ | 62 | 2019-03-04 | 55.56 | 6275.52 | 7.49 | | | 466.02 | | |
+ | 63 | 2019-03-05 | 55.56 | 6227.41 | 7.45 | | | 458.57 | | |
+ | 64 | 2019-03-06 | 55.56 | 6179.23 | 7.38 | | | 451.19 | | |
+ | 65 | 2019-03-07 | 55.56 | 6131.00 | 7.33 | | | 443.86 | | |
+ | 66 | 2019-03-08 | 55.56 | 6082.71 | 7.27 | | | 436.59 | | |
+ | 67 | 2019-03-09 | 55.56 | 6034.36 | 7.21 | | | 429.38 | | |
+ | 68 | 2019-03-10 | 55.56 | 5985.96 | 7.16 | | | 422.22 | | |
+ | 69 | 2019-03-11 | 55.56 | 5937.49 | 7.09 | | | 415.13 | | |
+ | 70 | 2019-03-12 | 55.56 | 5888.97 | 7.04 | | | 408.09 | | |
+ | 71 | 2019-03-13 | 55.56 | 5840.40 | 6.99 | | | 401.10 | | |
+ | 72 | 2019-03-14 | 55.56 | 5791.76 | 6.92 | | | 394.18 | | |
+ | 73 | 2019-03-15 | 55.56 | 5743.07 | 6.87 | | | 387.31 | | |
+ | 74 | 2019-03-16 | 55.56 | 5694.32 | 6.81 | | | 380.50 | | |
+ | 75 | 2019-03-17 | 55.56 | 5645.51 | 6.75 | | | 373.75 | | |
+ | 76 | 2019-03-18 | 55.56 | 5596.65 | 6.70 | | | 367.05 | | |
+ | 77 | 2019-03-19 | 55.56 | 5547.72 | 6.63 | | | 360.42 | | |
+ | 78 | 2019-03-20 | 55.56 | 5498.74 | 6.58 | | | 353.84 | | |
+ | 79 | 2019-03-21 | 55.56 | 5449.70 | 6.52 | | | 347.32 | | |
+ | 80 | 2019-03-22 | 55.56 | 5400.61 | 6.47 | | | 340.85 | | |
+ | 81 | 2019-03-23 | 55.56 | 5351.45 | 6.40 | | | 334.45 | | |
+ | 82 | 2019-03-24 | 55.56 | 5302.24 | 6.35 | | | 328.10 | | |
+ | 83 | 2019-03-25 | 55.56 | 5252.96 | 6.28 | | | 321.82 | | |
+ | 84 | 2019-03-26 | 55.56 | 5203.63 | 6.23 | | | 315.59 | | |
+ | 85 | 2019-03-27 | 55.56 | 5154.24 | 6.17 | | | 309.42 | | |
+ | 86 | 2019-03-28 | 55.56 | 5104.79 | 6.11 | | | 303.31 | | |
+ | 87 | 2019-03-29 | 55.56 | 5055.29 | 6.06 | | | 297.25 | | |
+ | 88 | 2019-03-30 | 55.56 | 5005.72 | 5.99 | | | 291.26 | | |
+ | 89 | 2019-03-31 | 55.56 | 4956.10 | 5.94 | | | 285.32 | | |
+ | 90 | 2019-04-01 | 55.56 | 4906.42 | 5.88 | | | 279.44 | | |
+ | 91 | 2019-04-02 | 55.56 | 4856.67 | 5.81 | | | 273.63 | | |
+ | 92 | 2019-04-03 | 55.56 | 4806.87 | 5.76 | | | 267.87 | | |
+ | 93 | 2019-04-04 | 55.56 | 4757.01 | 5.70 | | | 262.17 | | |
+ | 94 | 2019-04-05 | 55.56 | 4707.09 | 5.64 | | | 256.53 | | |
+ | 95 | 2019-04-06 | 55.56 | 4657.12 | 5.59 | | | 250.94 | | |
+ | 96 | 2019-04-07 | 55.56 | 4607.08 | 5.52 | | | 245.42 | | |
+ | 97 | 2019-04-08 | 55.56 | 4556.98 | 5.46 | | | 239.96 | | |
+ | 98 | 2019-04-09 | 55.56 | 4506.82 | 5.40 | | | 234.56 | | |
+ | 99 | 2019-04-10 | 55.56 | 4456.61 | 5.35 | | | 229.21 | | |
+ | 100 | 2019-04-11 | 55.56 | 4406.33 | 5.28 | | | 223.93 | | |
+ | 101 | 2019-04-12 | 55.56 | 4356.00 | 5.23 | | | 218.70 | | |
+ | 102 | 2019-04-13 | 55.56 | 4305.60 | 5.16 | | | 213.54 | | |
+ | 103 | 2019-04-14 | 55.56 | 4255.15 | 5.11 | | | 208.43 | | |
+ | 104 | 2019-04-15 | 55.56 | 4204.63 | 5.04 | | | 203.39 | | |
+ | 105 | 2019-04-16 | 55.56 | 4154.06 | 4.99 | | | 198.40 | | |
+ | 106 | 2019-04-17 | 55.56 | 4103.43 | 4.93 | | | 193.47 | | |
+ | 107 | 2019-04-18 | 55.56 | 4052.73 | 4.86 | | | 188.61 | | |
+ | 108 | 2019-04-19 | 55.56 | 4001.98 | 4.81 | | | 183.80 | | |
+ | 109 | 2019-04-20 | 55.56 | 3951.16 | 4.74 | | | 179.06 | | |
+ | 110 | 2019-04-21 | 55.56 | 3900.29 | 4.69 | | | 174.37 | | |
+ | 111 | 2019-04-22 | 55.56 | 3849.35 | 4.62 | | | 169.75 | | |
+ | 112 | 2019-04-23 | 55.56 | 3798.36 | 4.57 | | | 165.18 | | |
+ | 113 | 2019-04-24 | 55.56 | 3747.30 | 4.50 | | | 160.68 | | |
+ | 114 | 2019-04-25 | 55.56 | 3696.19 | 4.45 | | | 156.23 | | |
+ | 115 | 2019-04-26 | 55.56 | 3645.01 | 4.38 | | | 151.85 | | |
+ | 116 | 2019-04-27 | 55.56 | 3593.77 | 4.32 | | | 147.53 | | |
+ | 117 | 2019-04-28 | 55.56 | 3542.47 | 4.26 | | | 143.27 | | |
+ | 118 | 2019-04-29 | 55.56 | 3491.11 | 4.20 | | | 139.07 | | |
+ | 119 | 2019-04-30 | 55.56 | 3439.69 | 4.14 | | | 134.93 | | |
+ | 120 | 2019-05-01 | 55.56 | 3388.21 | 4.08 | | | 130.85 | | |
+ | 121 | 2019-05-02 | 55.56 | 3336.67 | 4.02 | | | 126.83 | | |
+ | 122 | 2019-05-03 | 55.56 | 3285.07 | 3.96 | | | 122.87 | | |
+ | 123 | 2019-05-04 | 55.56 | 3233.40 | 3.89 | | | 118.98 | | |
+ | 124 | 2019-05-05 | 55.56 | 3181.68 | 3.84 | | | 115.14 | | |
+ | 125 | 2019-05-06 | 55.56 | 3129.89 | 3.77 | | | 111.37 | | |
+ | 126 | 2019-05-07 | 55.56 | 3078.04 | 3.71 | | | 107.66 | | |
+ | 127 | 2019-05-08 | 55.56 | 3026.13 | 3.65 | | | 104.01 | | |
+ | 128 | 2019-05-09 | 55.56 | 2974.16 | 3.59 | | | 100.42 | | |
+ | 129 | 2019-05-10 | 55.56 | 2922.13 | 3.53 | | | 96.89 | | |
+ | 130 | 2019-05-11 | 55.56 | 2870.03 | 3.46 | | | 93.43 | | |
+ | 131 | 2019-05-12 | 55.56 | 2817.87 | 3.40 | | | 90.03 | | |
+ | 132 | 2019-05-13 | 55.56 | 2765.66 | 3.35 | | | 86.68 | | |
+ | 133 | 2019-05-14 | 55.56 | 2713.38 | 3.28 | | | 83.40 | | |
+ | 134 | 2019-05-15 | 55.56 | 2661.03 | 3.21 | | | 80.19 | | |
+ | 135 | 2019-05-16 | 55.56 | 2608.63 | 3.16 | | | 77.03 | | |
+ | 136 | 2019-05-17 | 55.56 | 2556.16 | 3.09 | | | 73.94 | | |
+ | 137 | 2019-05-18 | 55.56 | 2503.63 | 3.03 | | | 70.91 | | |
+ | 138 | 2019-05-19 | 55.56 | 2451.04 | 2.97 | | | 67.94 | | |
+ | 139 | 2019-05-20 | 55.56 | 2398.39 | 2.91 | | | 65.03 | | |
+ | 140 | 2019-05-21 | 55.56 | 2345.67 | 2.84 | | | 62.19 | | |
+ | 141 | 2019-05-22 | 55.56 | 2292.89 | 2.78 | | | 59.41 | | |
+ | 142 | 2019-05-23 | 55.56 | 2240.05 | 2.72 | | | 56.69 | | |
+ | 143 | 2019-05-24 | 55.56 | 2187.15 | 2.66 | | | 54.03 | | |
+ | 144 | 2019-05-25 | 55.56 | 2134.18 | 2.59 | | | 51.44 | | |
+ | 145 | 2019-05-26 | 55.56 | 2081.15 | 2.53 | | | 48.91 | | |
+ | 146 | 2019-05-27 | 55.56 | 2028.06 | 2.47 | | | 46.44 | | |
+ | 147 | 2019-05-28 | 55.56 | 1974.91 | 2.41 | | | 44.03 | | |
+ | 148 | 2019-05-29 | 55.56 | 1921.69 | 2.34 | | | 41.69 | | |
+ | 149 | 2019-05-30 | 55.56 | 1868.41 | 2.28 | | | 39.41 | | |
+ | 150 | 2019-05-31 | 55.56 | 1815.06 | 2.21 | | | 37.20 | | |
+ | 151 | 2019-06-01 | 55.56 | 1761.65 | 2.15 | | | 35.05 | | |
+ | 152 | 2019-06-02 | 55.56 | 1708.18 | 2.09 | | | 32.96 | | |
+ | 153 | 2019-06-03 | 55.56 | 1654.65 | 2.03 | | | 30.93 | | |
+ | 154 | 2019-06-04 | 55.56 | 1601.05 | 1.96 | | | 28.97 | | |
+ | 155 | 2019-06-05 | 55.56 | 1547.39 | 1.90 | | | 27.07 | | |
+ | 156 | 2019-06-06 | 55.56 | 1493.66 | 1.83 | | | 25.24 | | |
+ | 157 | 2019-06-07 | 55.56 | 1439.88 | 1.78 | | | 23.46 | | |
+ | 158 | 2019-06-08 | 55.56 | 1386.02 | 1.70 | | | 21.76 | | |
+ | 159 | 2019-06-09 | 55.56 | 1332.11 | 1.65 | | | 20.11 | | |
+ | 160 | 2019-06-10 | 55.56 | 1278.13 | 1.58 | | | 18.53 | | |
+ | 161 | 2019-06-11 | 55.56 | 1224.08 | 1.51 | | | 17.02 | | |
+ | 162 | 2019-06-12 | 55.56 | 1169.97 | 1.45 | | | 15.57 | | |
+ | 163 | 2019-06-13 | 55.56 | 1115.80 | 1.39 | | | 14.18 | | |
+ | 164 | 2019-06-14 | 55.56 | 1061.56 | 1.32 | | | 12.86 | | |
+ | 165 | 2019-06-15 | 55.56 | 1007.26 | 1.26 | | | 11.60 | | |
+ | 166 | 2019-06-16 | 55.56 | 952.90 | 1.20 | | | 10.40 | | |
+ | 167 | 2019-06-17 | 55.56 | 898.47 | 1.13 | | | 9.27 | | |
+ | 168 | 2019-06-18 | 55.56 | 843.97 | 1.06 | | | 8.21 | | |
+ | 169 | 2019-06-19 | 55.56 | 789.41 | 1.00 | | | 7.21 | | |
+ | 170 | 2019-06-20 | 55.56 | 734.79 | 0.94 | | | 6.27 | | |
+ | 171 | 2019-06-21 | 55.56 | 680.10 | 0.87 | | | 5.40 | | |
+ | 172 | 2019-06-22 | 55.56 | 625.35 | 0.81 | | | 4.59 | | |
+ | 173 | 2019-06-23 | 55.56 | 570.53 | 0.74 | | | 3.85 | | |
+ | 174 | 2019-06-24 | 55.56 | 515.64 | 0.67 | | | 3.18 | | |
+ | 175 | 2019-06-25 | 55.56 | 460.70 | 0.62 | | | 2.56 | | |
+ | 176 | 2019-06-26 | 55.56 | 405.68 | 0.54 | | | 2.02 | | |
+ | 177 | 2019-06-27 | 55.56 | 350.60 | 0.48 | | | 1.54 | | |
+ | 178 | 2019-06-28 | 55.56 | 295.46 | 0.42 | | | 1.12 | | |
+ | 179 | 2019-06-29 | 55.56 | 240.25 | 0.35 | | | 0.77 | | |
+ | 180 | 2019-06-30 | 55.56 | 184.97 | 0.28 | | | 0.49 | | |
+ | 181 | 2019-07-01 | 55.56 | 129.63 | 0.22 | | | 0.27 | | |
+ | 182 | 2019-07-02 | 55.56 | 74.23 | 0.16 | | | 0.11 | | |
+ | 183 | 2019-07-03 | 55.56 | 18.76 | 0.09 | | | 0.02 | | |
+ | 184 | 2019-07-04 | 18.78 | 0.00 | 0.02 | | | 0.00 | | |
Then Admin closes the Working Capital loan with a full repayment on "01 January 2019"
@TestRailId:C98249
@@ -1001,14 +1001,14 @@ Feature: WorkingCapitalAmortizationSchedule
| 0 | 2026-01-01 | -9000.00 | 9000.00 | | | | 1000.00 | 9000.00 | 1000.00 |
| 1 | 2026-01-02 | 47.22 | 8961.86 | 9.08 | 9904.00 | 999.84 | 990.92 | 95.84 | 0.16 |
| 2 | 2026-01-03 | 47.22 | 48.72 | 0.10 | 46.00 | 0.10 | 0.06 | 49.94 | 0.06 |
- | 3 | 2026-01-04 | 47.22 | 2.77 | 0.05 | 46.00 | 0.06 | 0.02 | 4.00 | 0.00 |
- | 4 | 2026-01-05 | 4.00 | 0.00 | 0.01 | | | 0.00 | | |
+ | 3 | 2026-01-04 | 47.22 | 2.77 | 0.05 | 46.00 | 0.06 | 0.01 | 4.00 | 0.00 |
+ | 4 | 2026-01-05 | 4.00 | 0.00 | 0.00 | | | 0.00 | | |
And The retrieved amortization schedule actual amortization total is "1000.00"
And The retrieved amortization schedule actual payments plus future expected payments total "10000.00"
And The retrieved amortization schedule has no negative monetary amounts
- And Admin remembers the retrieved amortization schedule as "PS-3352 persisted schedule"
+ And Admin remembers the retrieved amortization schedule as "C98249 persisted schedule"
When Admin retrieves the projected amortization schedule
- Then The retrieved amortization schedule exactly matches the remembered schedule "PS-3352 persisted schedule"
+ Then The retrieved amortization schedule exactly matches the remembered schedule "C98249 persisted schedule"
When Admin sets the business date to "05 January 2026"
And Admin runs inline COB job for Working Capital Loan
And Admin runs inline COB job for Working Capital Loan
@@ -1071,7 +1071,7 @@ Feature: WorkingCapitalAmortizationSchedule
| 0 | 2026-01-01 | -9000.00 | 9000.00 | | | | 1000.00 | 9000.00 | 1000.00 |
| 1 | 2026-01-02 | 13.89 | 8988.79 | 2.68 | 0.00 | 0.00 | 997.32 | 9000.00 | 1000.00 |
| 2 | 2026-01-03 | 13.89 | 8988.79 | 2.68 | 9970.00 | 999.99 | 997.32 | 29.99 | 0.01 |
- | 3 | 2026-01-04 | 13.89 | 16.10 | 0.01 | | | 0.00 | | |
+ | 3 | 2026-01-04 | 13.89 | 16.10 | 0.00 | | | 0.01 | | |
| 5 | 2026-01-06 | 2.22 | 0.00 | 0.00 | | | 0.00 | | |
Then Admin closes the Working Capital loan with a full repayment on "03 January 2026"
@@ -1314,31 +1314,53 @@ Feature: WorkingCapitalAmortizationSchedule
| 3 | 365 | 9907.994 | 0.006 |
@TestRailId:C98261
- Scenario Outline: Verify a single payment closes the loan at the exact residual -
+ * Close-of-business rebuilds too, but only once a day and only for the loans it processes. A repayment arriving between
+ * runs would otherwise read a model that has silently lost part of itself and write the loss back for good, so the
+ * repair has to happen on the request path as well. The counterpart of {@link ProgressiveLoanModelCheckerFilter}.
+ */
+@Component
+@RequiredArgsConstructor
+public class WorkingCapitalLoanModelCheckerFilter extends OncePerRequestFilter {
+
+ private final WorkingCapitalLoanModelProcessingService modelProcessingService;
+ private final WorkingCapitalLoanModelCheckerHelper helper;
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, final FilterChain filterChain)
+ throws ServletException, IOException {
+ request = new BodyCachingHttpServletRequestWrapper(request);
+
+ if (helper.isOnApiList((BodyCachingHttpServletRequestWrapper) request)) {
+ final List
+ * The counterpart of {@link ProgressiveLoanModelCheckerHelper} for working capital loans, and deliberately the same
+ * shape: the URL patterns and loan-id extraction match {@link WorkingCapitalLoanCOBFilterHelperImpl}, but this is a
+ * separate bean because that one exists only when close-of-business is enabled, and a model has to be brought up to
+ * date whether or not it is.
+ */
+@RequiredArgsConstructor
+@Component
+public class WorkingCapitalLoanModelCheckerHelper extends COBFilterApiMatcher implements InitializingBean {
+
+ private final WorkingCapitalLoanRepository loanRepository;
+
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ private static final List
+ * Ahead of the steps rather than as one of them: the steps read the schedule to decide what to post, so one running
+ * against a model that has silently lost part of itself would post against the wrong figures. This is the same
+ * place the progressive term-loan processor rebuilds, for the same reason.
+ */
+ @Override
+ public WorkingCapitalLoan process(@NonNull final WorkingCapitalLoan item) throws Exception {
+ if (modelProcessingService.requiresModelRecalculation(item.getId())) {
+ modelProcessingService.recalculateModelAndSave(item.getId());
+ }
+ return super.process(item);
}
@Override
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/cob/workingcapitalloan/WorkingCapitalLoanCOBWorkerConfiguration.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/cob/workingcapitalloan/WorkingCapitalLoanCOBWorkerConfiguration.java
index 978fd6db012..1fe3a2358df 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/cob/workingcapitalloan/WorkingCapitalLoanCOBWorkerConfiguration.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/cob/workingcapitalloan/WorkingCapitalLoanCOBWorkerConfiguration.java
@@ -35,6 +35,7 @@
import org.apache.fineract.infrastructure.springbatch.PropertyService;
import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan;
import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanRepository;
+import org.apache.fineract.portfolio.workingcapitalloan.service.WorkingCapitalLoanModelProcessingService;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.SimpleStepBuilder;
@@ -75,13 +76,14 @@ public class WorkingCapitalLoanCOBWorkerConfiguration {
private final ResetContextTasklet resetContextTasklet;
@Bean(WORKING_CAPITAL_LOAN_COB_WORKER_STEP)
- public Step workingCapitalLoanCOBWorkerStep(final COBBusinessStepService cobBusinessStepService) {
+ public Step workingCapitalLoanCOBWorkerStep(final COBBusinessStepService cobBusinessStepService,
+ final WorkingCapitalLoanModelProcessingService modelProcessingService) {
final SimpleStepBuilder
+ * Every figure the finished schedule shows is either one of these fields or a subtraction of two of them, so the walk
+ * is the single account of what happened on a day and the row built from it adds no arithmetic of its own.
+ *
+ *
+ * Two tracks run side by side. The expected track is the plan as it currently stands - restated from reality
+ * wherever reality is known. The actual track is what the money that has come in has really earned. Each keeps
+ * a high-precision running total and a normalized one; the normalized total is the rounded form of the high-precision
+ * one, which is what stops the fee drifting away from itself over a few hundred days.
+ *
+ * @param dayIndex
+ * 1-based day of the schedule
+ * @param eir
+ * the periodic rate in force on this day
+ * @param paymentsLeft
+ * discount-factor exponent, counted within the rate currently in force
+ * @param discountFactor
+ * {@code 1 / (1 + eir) ^ paymentsLeft}
+ * @param billedInstalment
+ * what the day asks for: the instalment in force, capped at the balance it has to close
+ * @param npvValue
+ * present value of what the day contributes - real money where it is known, the billed instalment where it
+ * is still a forecast, and nothing for a day that elapsed unpaid
+ * @param paidAmount
+ * money recorded against this day; {@code null} when the day carries no record at all
+ * @param collected
+ * every payment recorded up to and including this day
+ * @param balance
+ * what is still owed after the day, carried in full precision
+ * @param actualBalance
+ * the same, driven by money that really moved rather than by instalments assumed. Never below nothing: a
+ * borrower who has overpaid owes nothing, and the excess is the loan's overpayment rather than a negative
+ * balance
+ * @param normExpected
+ * the day's share of the fee on the expected track, already a whole number of minor units
+ * @param aggNormExpected
+ * expected fee earned up to and including this day, normalized
+ * @param normActual
+ * the day's share of the fee earned by money actually received
+ * @param aggNormActual
+ * actual fee earned up to and including this day, normalized
+ * @param hasPayment
+ * a positive payment landed on this day
+ * @param elapsed
+ * the day is behind the date the schedule has been calculated to, so its actual columns are known even if
+ * nothing was paid
+ */
+record AmortizationDay(int dayIndex, LocalDate date, BigDecimal eir, long paymentsLeft, BigDecimal discountFactor,
+ BigDecimal billedInstalment, BigDecimal npvValue, BigDecimal paidAmount, BigDecimal collected, BigDecimal balance,
+ BigDecimal actualBalance, BigDecimal normExpected, BigDecimal aggNormExpected, BigDecimal normActual, BigDecimal aggNormActual,
+ boolean hasPayment, boolean elapsed) {
+}
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/AmortizationParams.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/AmortizationParams.java
new file mode 100644
index 00000000000..cbe1e8daa78
--- /dev/null
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/AmortizationParams.java
@@ -0,0 +1,124 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.workingcapitalloan.calc;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The amortization parameters of a schedule: what the borrower is billed each day, how many days that takes, what the
+ * closing day bills instead, and the periodic rate that makes the three consistent.
+ *
+ *
+ * Derived identically for the original schedule and for every rate change, so a segment of the schedule is never a
+ * different kind of thing from the schedule itself - it is the same solve run on whatever balance and unearned fee are
+ * left at the day it starts.
+ *
+ *
+ * The rate is solved as the IRR of the exact cash flow the borrower will pay, closing remainder included. That is what
+ * makes the declining-balance recursion close on zero on the last day and its daily accruals sum to exactly the
+ * discount fee - the property the whole schedule is built on.
+ */
+final class AmortizationParams {
+
+ private AmortizationParams() {}
+
+ /**
+ * {@code (TPV x periodPaymentRate) / npvDayCount / 100}, rounded to the loan currency's decimal places. Rounding is
+ * intrinsic: the daily payment is what the borrower is billed, so it must be an amount actually payable in the loan
+ * currency.
+ *
+ *
+ * A positive payment rate always bills something, so when the exact amount is positive but too small to survive the
+ * rounding it is raised to one minor currency unit rather than collapsing to zero. Zero is not a payment the
+ * borrower can make: it would leave the schedule with no way to repay the balance, and dividing the gross payable
+ * by it to derive the term is undefined.
+ */
+ static BigDecimal dailyPayment(final BigDecimal totalPaymentVolume, final BigDecimal periodPaymentRate, final int npvDayCount,
+ final int currencyScale, final MathContext mc) {
+ final BigDecimal exact = totalPaymentVolume.multiply(periodPaymentRate, mc).divide(BigDecimal.valueOf(npvDayCount), mc)
+ .divide(BigDecimal.valueOf(100), mc);
+ final BigDecimal rounded = exact.setScale(currencyScale, mc.getRoundingMode());
+ if (rounded.signum() == 0 && exact.signum() > 0) {
+ return BigDecimal.ONE.movePointLeft(currencyScale);
+ }
+ return rounded;
+ }
+
+ /**
+ * Solves the parameters for a balance and the fee still unearned against it.
+ *
+ * @throws IllegalArgumentException
+ * when the inputs cannot produce a payable schedule
+ */
+ static Solved solve(final BigDecimal balance, final BigDecimal unearnedFee, final BigDecimal totalPaymentVolume,
+ final BigDecimal periodPaymentRate, final int npvDayCount, final int currencyScale, final MathContext mc) {
+ final BigDecimal daily = dailyPayment(totalPaymentVolume, periodPaymentRate, npvDayCount, currencyScale, mc);
+ if (daily.signum() <= 0) {
+ throw new IllegalArgumentException("daily payment must be positive (check totalPaymentVolume and periodPaymentRate)");
+ }
+ final BigDecimal grossPayable = balance.add(unearnedFee, mc);
+ final BigDecimal fractionalTerm = grossPayable.divide(daily, mc);
+ // Checked on the BigDecimal so int overflow cannot slip past the cap; the rate solver may still succeed on an
+ // over-cap term via its zero-rate shortcut, so relying on that call to fail is not enough.
+ if (fractionalTerm.compareTo(BigDecimal.valueOf(ProjectedAmortizationScheduleModel.MAX_CALCULABLE_TOTAL_DAYS)) > 0) {
+ throw new IllegalStateException("schedule would run for " + fractionalTerm + " days, above the calculable cap of "
+ + ProjectedAmortizationScheduleModel.MAX_CALCULABLE_TOTAL_DAYS);
+ }
+ final int term = fractionalTerm.setScale(0, RoundingMode.UP).intValueExact();
+ if (term <= 0) {
+ throw new IllegalArgumentException("computed term must be positive, got: " + term);
+ }
+ // The closing day pays only the remainder of the gross payable after the (term - 1) full daily payments. When
+ // the schedule divides evenly this equals the daily payment.
+ final BigDecimal closing = grossPayable.subtract(daily.multiply(BigDecimal.valueOf(term - 1L), mc), mc);
+ final BigDecimal eir = TvmFunctions.irr(cashFlows(balance, daily, closing, term), mc);
+ return new Solved(daily, closing, term, eir);
+ }
+
+ /**
+ * The cash-flow series the rate is solved against: {@code [-balance, daily x (term - 1), closing]}. The day-zero
+ * flow is the negated balance; the periodic payments follow, the last being the remainder.
+ */
+ private static List
+ * A working capital loan amortizes its deferred fee against money received: what matters is how much has come in, not
+ * when. A loan of 900 plus a 100 fee that is repaid in full on its first day has earned the whole 100 that day, and its
+ * schedule is one day long. A payment of double the instalment earns two days of fee and takes a day off the end. A day
+ * that goes by unpaid earns nothing and pushes the end out by a day.
+ *
+ *
+ * So the fee earned is a function of one variable - the money collected so far - and that function is the schedule's
+ * own declining-balance recursion, run on the instalments it plans to bill rather than on the payments that really
+ * arrived. This class is that recursion, held as a cursor.
+ *
+ *
+ * It is a cursor rather than a precomputed table because it is only ever read at a total that has grown: money
+ * collected never goes down. So it walks forward on demand, one plan instalment at a time, and over a whole schedule it
+ * takes no more steps than the schedule has days. Reading it between two of its own steps interpolates within that
+ * step, which is what earns a partly-covered day a proportional share of its fee.
+ *
+ *
+ * A rate change repositions it onto the day's reality rather than restarting it. Fee earned under the old rate stays
+ * earned - the change rewrites what is still to come, not what already happened.
+ */
+final class PlanCursor {
+
+ private final MathContext mc;
+ private final BigDecimal totalPaymentVolume;
+ private final int npvDayCount;
+ private final int currencyScale;
+
+ /** Balance the plan has drawn down to at the cursor's position. */
+ private BigDecimal balance;
+ /** Fee the plan has earned up to the cursor's position, in full precision. */
+ private BigDecimal earned;
+ /** Money the plan has billed up to the cursor's position. */
+ private BigDecimal billed;
+
+ /** Position and earnings at the cursor's previous step, so a read between the two can interpolate. */
+ private BigDecimal previousEarned;
+ private BigDecimal previousBilled;
+
+ private AmortizationParams.Solved solved;
+ /** Steps taken since the last solve, so the closing remainder is billed on the right one. */
+ private int stepsInSolve;
+ private boolean exhausted;
+
+ PlanCursor(final BigDecimal netDisbursement, final BigDecimal discountFee, final BigDecimal totalPaymentVolume,
+ final BigDecimal periodPaymentRate, final int npvDayCount, final int currencyScale, final MathContext mc) {
+ this.mc = mc;
+ this.totalPaymentVolume = totalPaymentVolume;
+ this.npvDayCount = npvDayCount;
+ this.currencyScale = currencyScale;
+ this.balance = netDisbursement;
+ this.earned = BigDecimal.ZERO;
+ this.billed = BigDecimal.ZERO;
+ this.previousEarned = BigDecimal.ZERO;
+ this.previousBilled = BigDecimal.ZERO;
+ this.solved = AmortizationParams.solve(netDisbursement, discountFee, totalPaymentVolume, periodPaymentRate, npvDayCount,
+ currencyScale, mc);
+ this.stepsInSolve = 0;
+ this.exhausted = false;
+ }
+
+ /** The rate currently driving the plan, which is also the rate the schedule bills at. */
+ AmortizationParams.Solved solved() {
+ return solved;
+ }
+
+ /**
+ * Repositions the cursor onto the schedule's real position and re-solves the plan from there at a new rate.
+ *
+ *
+ * The fee already earned is carried across untouched, and the cursor is set level with the money already collected,
+ * so the read that follows starts where the last one finished. Nothing the borrower has earned is un-earned and
+ * nothing is earned twice.
+ */
+ void changeRateTo(final BigDecimal periodPaymentRate, final BigDecimal balanceNow, final BigDecimal unearnedFee,
+ final BigDecimal collectedSoFar) {
+ if (balanceNow.signum() <= 0) {
+ throw new IllegalArgumentException("balance at a rate change must be positive, got: " + balanceNow);
+ }
+ // Read the cursor before moving it. It sits at the end of whichever plan instalment the money collected reached
+ // into, which is past the money itself, and the fee earned is the value interpolated back to the money - not
+ // the
+ // whole instalment the cursor happens to be standing on. Carrying the cursor's own position across as the new
+ // baseline would hand the borrower the rest of that instalment's fee for free, and a rate change would appear
+ // to
+ // restate fee that was already earned.
+ final BigDecimal earnedAtCollected = feeEarnedAt(collectedSoFar);
+ this.balance = balanceNow;
+ this.earned = earnedAtCollected;
+ this.billed = collectedSoFar;
+ this.previousEarned = earnedAtCollected;
+ this.previousBilled = collectedSoFar;
+ this.stepsInSolve = 0;
+ this.exhausted = false;
+ this.solved = AmortizationParams.solve(this.balance, MathUtil.negativeToZero(unearnedFee), totalPaymentVolume, periodPaymentRate,
+ npvDayCount, currencyScale, mc);
+ }
+
+ /**
+ * The fee earned once {@code collected} has come in.
+ *
+ *
+ * Steps the plan forward until it has billed at least as much as has been collected, then reads back to
+ * {@code collected} within the step it landed in. Once the plan has nothing left to bill the fee stops growing:
+ * money handed over beyond the payable earns nothing, because there is nothing left to earn.
+ */
+ BigDecimal feeEarnedAt(final BigDecimal collected) {
+ if (collected.signum() <= 0) {
+ return BigDecimal.ZERO;
+ }
+ while (!exhausted && billed.compareTo(collected) < 0) {
+ step();
+ }
+ if (billed.compareTo(collected) <= 0) {
+ return earned;
+ }
+ // Landed past the money: the cursor stepped over it, so read back into the step it is standing in. The fee
+ // that step earns is spread across the money it bills, and the money collected covers part of it.
+ final BigDecimal span = billed.subtract(previousBilled, mc);
+ if (span.signum() <= 0) {
+ return earned;
+ }
+ final BigDecimal into = collected.subtract(previousBilled, mc);
+ final BigDecimal fractionOfTheStepPaid = into.divide(span, mc);
+ final BigDecimal feeTheStepEarns = earned.subtract(previousEarned, mc);
+ return previousEarned.add(feeTheStepEarns.multiply(fractionOfTheStepPaid, mc), mc);
+ }
+
+ /** One plan instalment: accrue on the balance, bill what the plan asks for, and draw the balance down. */
+ private void step() {
+ stepsInSolve++;
+ final BigDecimal grown = balance.multiply(BigDecimal.ONE.add(solved.eir(), mc), mc);
+ // The instalment, capped at the balance there is to close - the same rule the schedule bills by, so a borrower
+ // paying exactly to plan earns exactly what the plan projected rather than nearly it. The plan's last step
+ // bills what is left on it, which the cap already gives; naming a separate closing amount here would have that
+ // step bill the remainder the plan was solved for even once a repositioning had left it owing more.
+ final BigDecimal instalment = MathUtil.negativeToZero(solved.dailyPayment()).min(MathUtil.negativeToZero(grown));
+ if (instalment.signum() <= 0) {
+ // Nothing left to bill: the plan has run out and the fee it holds is all there is to earn.
+ exhausted = true;
+ return;
+ }
+ previousEarned = earned;
+ previousBilled = billed;
+ earned = earned.add(grown.subtract(balance, mc), mc);
+ billed = billed.add(instalment, mc);
+ balance = grown.subtract(instalment, mc);
+ }
+}
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java
index 6b427172bd8..bc7dfb0e754 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleModel.java
@@ -21,7 +21,6 @@
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal;
import java.math.MathContext;
-import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
@@ -31,13 +30,11 @@
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-import java.util.Set;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.infrastructure.core.serialization.gson.JsonExclude;
-import org.apache.fineract.infrastructure.core.service.MathUtil;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.Money;
@@ -47,30 +44,37 @@
*
*
- * Each period carries both what the schedule planned and what really happened. The two are not independent: every
- * recorded payment re-seeds the projection that follows it from the balance the borrower actually owes, so a loan
- * running behind is projected forward from its real position rather than from instalments it never made. Periods before
- * the first payment keep the plan they were written with, because nothing is known about them yet.
+ * The six figures the loan was written with, the payments recorded against it, the rate changes it has seen, and the
+ * date it has been calculated to. Nothing else. Every period of the schedule is derived from those by
+ * {@link AmortizationWalk} and rebuilt whenever one of them moves, so there is exactly one account of how a schedule is
+ * produced and no stored figure that can fall out of step with it.
+ *
+ *
+ * Each day carries both what the schedule planned and what really happened. The two are not independent: every recorded
+ * payment restates the projection that follows it from the balance the borrower actually owes, so a loan running behind
+ * is projected forward from its real position rather than from instalments it never made. Days before the first payment
+ * keep the plan they were written with, because nothing is known about them yet.
*
- * Where the term is not enough to clear what is left, catch-up periods continue the schedule past it — same instalment,
- * balance still declining, fee still being earned — until the balance reaches zero.
+ * Where the term is not enough to clear what is left, the walk simply keeps going - same instalment, balance still
+ * declining, fee still being earned - until the balance reaches zero. There is no separate run of catch-up periods,
+ * because the schedule ends wherever the loan closes.
*/
@Getter
@Accessors(fluent = true)
@Slf4j
public final class ProjectedAmortizationScheduleModel {
- private static final String MODEL_VERSION = "6";
+ private static final String MODEL_VERSION = "7";
/**
* Cap on Total Days: beyond this the schedule materialises an unreasonable number of rows and the EIR is
@@ -86,12 +90,12 @@ public final class ProjectedAmortizationScheduleModel {
private final int npvDayCount;
private final LocalDate expectedDisbursementDate;
- /** {@code (TPV × periodPaymentRate) / npvDayCount} — constant across all but the final payment. */
+ /** {@code (TPV x periodPaymentRate) / npvDayCount / 100} - constant across all but the final payment. */
private final Money expectedPaymentAmount;
/**
- * Final-period payment: the remainder {@code (netDisbursementAmount + discountFeeAmount) − (originalPaymentNumber −
- * 1) × expectedPaymentAmount}. Equals {@link #expectedPaymentAmount} when the schedule divides evenly.
+ * Final-period payment: the remainder {@code (netDisbursementAmount + discountFeeAmount) - (originalPaymentNumber -
+ * 1) x expectedPaymentAmount}. Equals {@link #expectedPaymentAmount} when the schedule divides evenly.
*/
private final Money finalPaymentAmount;
@@ -100,9 +104,10 @@ public final class ProjectedAmortizationScheduleModel {
private final int originalPaymentNumber;
/**
- * Periodic effective rate, solved as {@code IRR([−netDisbursement, expectedPayment × (n−1), finalPayment])} and
- * seeded with a linear rate estimate. Because the cash flow carries the smaller final remainder payment rather than
- * assuming a uniform payment throughout, this is zero exactly when the loan carries no discount fee.
+ * Periodic effective rate, solved as {@code IRR([-netDisbursement, expectedPayment x (n-1), finalPayment])}.
+ * Because the cash flow carries the smaller final remainder payment rather than assuming a uniform payment
+ * throughout, this is zero exactly when the loan carries no discount fee - and the declining-balance recursion
+ * built on it closes at exactly zero on the last day, with its daily accruals summing to exactly the discount fee.
*/
private final BigDecimal effectiveInterestRate;
@@ -117,18 +122,18 @@ public final class ProjectedAmortizationScheduleModel {
private final List
* The adjustment is deliberately kept out of the amortization: it does not enter the EIR, the NPV, the expected
- * balance or the payment analysis. It only raises {@code expectedPaymentAmount} of its own period, because the
- * re-injected principal is owned by the loan balance ({@code principalAdjustment} / {@code principalOutstanding}),
- * while this model stays the projection of the originally disbursed amount.
+ * balance or the fee. It only raises {@code expectedPaymentAmount} of its own period, because the re-injected
+ * principal is owned by the loan balance ({@code principalAdjustment} / {@code principalOutstanding}), while this
+ * model stays the projection of the originally disbursed amount.
*
*
* The date is clamped into the amortization term the same way {@link #applyPayment} clamps a payment date. A credit
* balance refund lands on an overpaid loan, so its date is often at or past maturity; without the clamp the
* adjustment would match no period at all and silently vanish from the projection while the balance still owed it.
- * Unlike a payment it does not advance {@code calculatedTillDate}: that would move which periods count as passed
- * and so change the NPV source, and the adjustment must leave the amortization alone.
+ * Unlike a payment it does not advance {@code calculatedTillDate}: that would move which days count as passed and
+ * so change the NPV source, and the adjustment must leave the amortization alone.
*/
public void applyPrincipalAdjustment(final LocalDate adjustmentDate, final BigDecimal amount) {
Objects.requireNonNull(adjustmentDate, "adjustmentDate");
@@ -313,23 +328,23 @@ private ProjectedAmortizationScheduleModel withDiscount(final BigDecimal asOfDis
}
/**
- * How many periods the schedule currently runs to: the contractual term, or the number of periods that have already
- * gone by if the borrower has fallen past it.
+ * How many days the schedule is measured over: the term the rate in force was solved to close on, or the number of
+ * days that have already gone by if the borrower has fallen past it.
*
*
* A working capital loan does not stop having a schedule because its original last day went by unpaid. The debt is
- * still there and still being billed, so the periods keep coming: a borrower who pays nothing for two years has two
- * years of missed instalments behind them and the same remaining days ahead, pushed out day by day. Bounding the
- * schedule at the contractual term instead froze it one term past maturity, and everything measured from it - what
- * a payment can be dated, where a rate change may take effect, which days count as missed - froze with it.
+ * still there and still being billed, so the days keep coming: a borrower who pays nothing for two years has two
+ * years of missed instalments behind them and the same remaining days ahead, pushed out day by day. Bounding this
+ * at the contractual term instead froze it one term past maturity, and everything measured from it - what a payment
+ * can be dated, where a rate change may take effect - froze with it.
*/
private int scheduleTerm() {
- // Today's period counts: it is due now, so it must have a row for a payment or a rate change dated today to
- // land on. Only the periods before it have elapsed.
+ // Today's day counts: it is due now, so it must have a row for a payment or a rate change dated today to land
+ // on. Only the days before it have elapsed.
return Math.max(effectiveTotalTerm(), elapsedPeriodCount() + 1);
}
- /** Periods whose date has already gone by, counted from the dates alone so it cannot depend on the schedule. */
+ /** Days whose date has already gone by, counted from the dates alone so it cannot depend on the schedule. */
private int elapsedPeriodCount() {
if (calculatedTillDate == null) {
return 0;
@@ -338,38 +353,12 @@ private int elapsedPeriodCount() {
return (int) Math.clamp(elapsed, 0L, MAX_CALCULABLE_TOTAL_DAYS);
}
- public int effectiveTotalTerm() {
- if (rateSegments == null || rateSegments.isEmpty()) {
- return originalPaymentNumber;
- }
- final RateSegment last = rateSegments.getLast();
- // When startDayIndex > 0, the segment overlaps one day with the base schedule (the split day),
- // so subtract 1. When startDayIndex == 0, there are no base days — no overlap.
- final int overlap = last.startDayIndex() > 0 ? 1 : 0;
- return last.startDayIndex() + last.segmentTerm() - overlap;
- }
-
/**
- * {@code (TPV × periodPaymentRate) / npvDayCount / 100}, rounded to the loan currency's decimal places. Rounding is
- * intrinsic: the daily payment is what the borrower is billed, so it must be an amount actually payable in the loan
- * currency (matches the reference model's {@code ROUND(TPV*rate/dayCount, 2)} and the platform's Money rounding).
- *
- *
- * A positive payment rate always bills something, so when the exact amount is positive but too small to survive the
- * rounding it is raised to one minor currency unit rather than collapsing to zero. Zero is not a payment the
- * borrower can make: it would leave the schedule with no way to repay the balance, and dividing the gross payable
- * by it to derive the term is undefined. Only this degenerate case is affected — any amount that already rounds to
- * a payable value is untouched.
+ * The day the rate currently in force was solved to close on - what the schedule would run to if the borrower paid
+ * exactly to plan from here. Equals {@link #originalPaymentNumber} until a rate change moves it.
*/
- private static BigDecimal computeDailyPayment(final BigDecimal totalPaymentValue, final BigDecimal periodPaymentRate,
- final int npvDayCount, final int currencyScale, final MathContext mc) {
- final BigDecimal exact = totalPaymentValue.multiply(periodPaymentRate, mc).divide(BigDecimal.valueOf(npvDayCount), mc)
- .divide(BigDecimal.valueOf(100), mc);
- final BigDecimal rounded = exact.setScale(currencyScale, mc.getRoundingMode());
- if (rounded.signum() == 0 && exact.signum() > 0) {
- return BigDecimal.ONE.movePointLeft(currencyScale);
- }
- return rounded;
+ public int effectiveTotalTerm() {
+ return contractualTerm > 0 ? contractualTerm : originalPaymentNumber;
}
/**
@@ -385,26 +374,9 @@ public static boolean isEirCalculable(final BigDecimal discountFeeAmount, final
if (netDisbursementAmount.signum() <= 0 || npvDayCount <= 0) {
return false;
}
- final BigDecimal dailyPayment = computeDailyPayment(totalPaymentVolume, periodPaymentRate, npvDayCount,
- currency.getDigitsAfterDecimal(), mc);
- if (dailyPayment.signum() <= 0) {
- return false;
- }
- final BigDecimal totalDays = netDisbursementAmount.add(discountFeeAmount, mc).divide(dailyPayment, mc).setScale(0, RoundingMode.UP);
- if (totalDays.signum() <= 0 || totalDays.compareTo(BigDecimal.valueOf(MAX_CALCULABLE_TOTAL_DAYS)) > 0) {
- return false;
- }
- final BigDecimal grossPayable = netDisbursementAmount.add(discountFeeAmount, mc);
- final int paymentNumber = grossPayable.divide(dailyPayment, mc).setScale(0, RoundingMode.UP).intValueExact();
- if (paymentNumber <= 0) {
- throw new IllegalArgumentException("computed paymentNumber must be positive, got: " + paymentNumber);
- }
-
- // The final period pays only the remainder of the gross payable after the (n-1) full daily payments. When the
- // schedule divides evenly this equals the daily payment.
- final BigDecimal finalPayment = grossPayable.subtract(dailyPayment.multiply(BigDecimal.valueOf(paymentNumber - 1L), mc), mc);
try {
- TvmFunctions.irr(buildEirCashFlows(netDisbursementAmount, dailyPayment, finalPayment, paymentNumber), mc);
+ AmortizationParams.solve(netDisbursementAmount, discountFeeAmount, totalPaymentVolume, periodPaymentRate, npvDayCount,
+ currency.getDigitsAfterDecimal(), mc);
} catch (final ArithmeticException | IllegalArgumentException | IllegalStateException e) {
return false;
}
@@ -428,63 +400,13 @@ public static ProjectedAmortizationScheduleModel generate(final BigDecimal disco
throw new IllegalArgumentException("npvDayCount must be positive");
}
- final ScheduleParams params = computeScheduleParams(netDisbursementAmount, discountFeeAmount, totalPaymentVolume, periodPaymentRate,
- npvDayCount, currency, mc);
+ final AmortizationParams.Solved solved = AmortizationParams.solve(netDisbursementAmount, discountFeeAmount, totalPaymentVolume,
+ periodPaymentRate, npvDayCount, currency.getDecimalPlaces(), mc);
return new ProjectedAmortizationScheduleModel(Money.of(currency, discountFeeAmount, mc),
Money.of(currency, netDisbursementAmount, mc), Money.of(currency, totalPaymentVolume, mc), periodPaymentRate, npvDayCount,
- expectedDisbursementDate, Money.of(currency, params.dailyPayment(), mc), Money.of(currency, params.finalPayment(), mc),
- params.paymentNumber(), params.eir(), mc, currency, currentDate);
- }
-
- /**
- * Derives the amortization parameters for a schedule (or a rate-change sub-schedule): the currency-rounded daily
- * payment, the round-up payment count, the smaller remainder final payment, and the EIR as the IRR of the resulting
- * non-uniform cash-flow series. Shared by {@link #generate} and {@link #applyRateChange} so the base schedule and
- * every rate segment are computed identically.
- */
- private static ScheduleParams computeScheduleParams(final BigDecimal netDisbursement, final BigDecimal discountFee,
- final BigDecimal totalPaymentVolume, final BigDecimal periodPaymentRate, final int npvDayCount, final CurrencyData currency,
- final MathContext mc) {
- // The daily payment is rounded to the loan currency, so every downstream value — payment number, remainder, EIR
- // and balances — is derived from the same amount the borrower is actually billed.
- final BigDecimal dailyPayment = computeDailyPayment(totalPaymentVolume, periodPaymentRate, npvDayCount, currency.getDecimalPlaces(),
- mc);
- if (dailyPayment.signum() <= 0) {
- throw new IllegalArgumentException("daily payment must be positive (check totalPaymentVolume and periodPaymentRate)");
- }
-
- final BigDecimal grossPayable = netDisbursement.add(discountFee, mc);
- final int paymentNumber = grossPayable.divide(dailyPayment, mc).setScale(0, RoundingMode.UP).intValueExact();
- if (paymentNumber <= 0) {
- throw new IllegalArgumentException("computed paymentNumber must be positive, got: " + paymentNumber);
- }
-
- // The final period pays only the remainder of the gross payable after the (n-1) full daily payments. When the
- // schedule divides evenly this equals the daily payment.
- final BigDecimal finalPayment = grossPayable.subtract(dailyPayment.multiply(BigDecimal.valueOf(paymentNumber - 1L), mc), mc);
-
- // EIR is the IRR of the actual (non-uniform) cash-flow series. The IRR seeds its Newton-Raphson search from a
- // linear estimate of the series, so no separate uniform-annuity RATE solve is needed.
- final BigDecimal eir = TvmFunctions.irr(buildEirCashFlows(netDisbursement, dailyPayment, finalPayment, paymentNumber), mc);
-
- return new ScheduleParams(dailyPayment, paymentNumber, finalPayment, eir);
- }
-
- /**
- * Builds the cash-flow series for the EIR/IRR solve:
- * {@code [−netDisbursement, dailyPayment × (n−1), finalPayment]}. The day-0 flow is the negated outstanding
- * balance; the periodic payments follow, the last being the remainder.
- */
- private static List
- * Any existing segments at or after the split point are removed first (supports undo/overwrite).
+ * Only the date and the new rate are kept. What the change has to re-price - the balance still outstanding and the
+ * fee not yet earned against it - is whatever the walk is carrying when it reaches that day, so the two can never
+ * disagree about how much of the loan the days before the change already accounted for. It was exactly that
+ * disagreement, between a balance measured one way and a deduction measured another, that let a schedule bill the
+ * loan twice.
+ *
+ *
+ * Changes must arrive in ascending effective-date order, and a caller that breaks that is rejected rather than
+ * quietly given a wrong schedule. This method can only append: it has no way to insert a change ahead of ones
+ * already recorded, because each change is sized against the balance and unearned fee reached on its own day and a
+ * change slotted in earlier moves both for every change after it. A backdated change is therefore applied by
+ * replaying the whole history in effective-date order onto a fresh model - which is what
+ * {@code regenerateAmortizationScheduleOnRateChange} does - not by calling this with an earlier date.
+ *
+ *
+ * A change already recorded on this exact date is replaced, so booking twice on one day overwrites rather than
+ * leaving the day with two rates.
*
* @param newPeriodPaymentRate
* the new period payment rate as a percentage
* @param rateChangeDate
- * the date the new rate takes effect (must be within model's date range); may be in the future
+ * the date the new rate takes effect (must not precede disbursement, and must not precede a change
+ * already recorded); may be in the future
* @param currentDate
* today's business date, capping how far {@code calculatedTillDate} may advance; {@code null} lets the
* effective date advance it unchecked
@@ -653,121 +556,137 @@ public void recalculateNetAmortizationAndDeferredBalanceFrom(final LocalDate rep
public void applyRateChange(final BigDecimal newPeriodPaymentRate, final LocalDate rateChangeDate, final LocalDate currentDate) {
Objects.requireNonNull(newPeriodPaymentRate, "newPeriodPaymentRate");
Objects.requireNonNull(rateChangeDate, "rateChangeDate");
+ if (rateChangeDate.isBefore(expectedDisbursementDate)) {
+ throw new IllegalArgumentException("rateChangeDate must not be before expectedDisbursementDate");
+ }
+ if (rateChanges == null) {
+ throw new IllegalStateException("Model not properly initialized; rateChanges is null");
+ }
// A rate change proves time has advanced only as far as the day it was booked on. Letting a future effective
- // date carry calculatedTillDate with it would mark the periods between today and that date as elapsed, so the
- // catch-up machinery would bill them as missed and the NPV would be taken from the wrong periods.
+ // date carry calculatedTillDate with it would mark the days between today and that date as elapsed, so the
+ // catch-up machinery would bill them as missed and the NPV would be taken from the wrong days.
final LocalDate reachedDate = currentDate != null && rateChangeDate.isAfter(currentDate) ? currentDate : rateChangeDate;
updateCalculatedTillDate(reachedDate);
- final int rawSplitDayIndex = (int) ChronoUnit.DAYS.between(expectedDisbursementDate, rateChangeDate);
- if (rawSplitDayIndex < 0) {
- throw new IllegalArgumentException("rateChangeDate must not be before expectedDisbursementDate");
- }
+ // Moving the date reached lengthens the schedule, and both the clamp and the balance check below are measured
+ // against it, so the old schedule must not be the one they read.
+ invalidateDerivedPayments();
- // Segment starts on the period whose date == rateChangeDate. Convert the calendar-day rawSplitDayIndex
- // to a period number via the first-period offset (0 when a disbursement-date repayment shifted the grid),
- // else the new rate starts one day early. Clamped to the active (effective) term so a change at/after the
- // current end of an already-segmented schedule starts on the final period.
- final int splitDayIndex = Math.min(rawSplitDayIndex + (1 - currentFirstPeriodDayOffset()), scheduleTerm());
+ // Clamped to the day the schedule currently runs to, so a change dated at or past the end of an
+ // already-lengthened schedule takes effect on its final day rather than falling off it.
+ //
+ // Deliberately not clamped up to the first instalment the way a payment date is. Which calendar day the
+ // schedule starts on depends on whether anything was paid on the disbursement date, so the first instalment is
+ // a day that moves - and a stored date normalized against it is only right for the offset it was normalized
+ // under. Two changes a day apart both pulled onto that day would share one effective date, and recording the
+ // second would overwrite the first: a change the loan still reports as in force, silently absent from the
+ // schedule it was meant to re-rate. Kept raw, the walk resolves a date before the first instalment onto the
+ // first day instead, where a later change supersedes an earlier one as it does on any other day.
+ final LocalDate effectiveDate = clampToLastScheduledDay(rateChangeDate);
+ if (owedOn(effectiveDate).signum() <= 0) {
+ throw new IllegalArgumentException("balance at a rate change must be positive");
+ }
+
+ // Appending only. Dropping the later changes to make room - which is what this used to do - left a backdated
+ // call returning normally having silently deleted them, and the schedule wrong with no signal. The service
+ // replays in effective-date order, so nothing reaches here out of order; saying so here is what keeps that a
+ // property of the code rather than of a comment.
+ final Optional
+ * Every payment needs its own day, including one dated past the day the balance closed - a payment on a loan
+ * already square is an overpayment, and the schedule has to account for it rather than end before the day it
+ * arrived on. A principal adjustment needs its own day for the same reason, and a stronger one: the re-injected
+ * principal is owed again, so the projection has to bill it.
+ *
+ *
+ * Days that merely elapsed are not a reason to run on. While the loan still owes something the walk reaches today
+ * anyway - it keeps billing until the balance closes, and a day gone by unpaid does not bring that closer - so this
+ * would only ever extend a schedule whose balance had already closed, where every further day bills nothing against
+ * nothing. Those rows carry no information, and the last of them would date the loan's maturity months after it was
+ * actually repaid.
+ */
+ private int minimumScheduleDays() {
+ int minimum = 1;
+ final int offset = currentFirstPeriodDayOffset();
+ for (final ActualPayment payment : actualPayments) {
+ minimum = Math.max(minimum, resolvePaymentIndex(payment.date(), offset) + 1);
+ }
+ if (principalAdjustments != null) {
+ for (final PrincipalAdjustment adjustment : principalAdjustments) {
+ minimum = Math.max(minimum, resolvePaymentIndex(adjustment.date(), offset) + 1);
+ }
+ }
+ return minimum;
}
private Map
+ * A day with no record at all leaves its actual columns empty: nothing is known about it yet. A day that elapsed
+ * with nothing on it reports nil rather than nothing, because a missed instalment is a fact about the loan.
+ */
+ private List
- * A period is only spent when the loan was already square before it began. Zero present value alone does not say
- * that: an elapsed period that went unpaid contributes nothing to present value yet still owes its instalment, so a
- * loan that has never paid a penny would otherwise have its whole schedule trimmed away the day it passed maturity.
- * The balance the period opened on is what tells the two apart.
- */
- private static void trimTrailingZeroNpvPayments(final List
- * Rounding each period to the currency scale leaves a few cents unaccounted for, and the catch-up periods beyond
- * the term earn fee of their own; both are settled onto the term's final periods here. Whatever is still unearned
- * once the tail has taken its share is the shortfall to distribute.
- */
- private BalancesAndAmortizations computeBalancesAndAmortizations(final Map
- * A re-based schedule therefore books fee twice over its whole length - once as the history it already recorded,
- * once as the plan to earn it again - and that is why the column does not simply sum to the fee.
- */
- private BigDecimal unearnedFeeAt(final int period, final Map
- * Every recorded payment re-seeds the periods that follow it from what the borrower actually owes, so a loan that
- * has fallen behind stops being projected as though the instalments it missed had been collected. Periods before
- * the first payment keep the schedule they were written with: until something is known to have happened on a day,
- * the plan for it stands. A backdated payment lands earlier in this same walk and carries the periods after it
- * along, which is all the re-processing that case needs.
- *
- *
- * The returned amortization list is not settled — the caller that needs the full schedule applies
- * {@link #settleAmortizationOntoFinalPeriods}; a bounded prefix used to read the balance at a rate-change split
- * does not. Pass {@code null} for {@code settledPaymentsByDate} to walk the pure projection throughout, which is
- * what the unchanging original schedule is built from.
- */
- private BalancesAndAmortizations computeBalancesAndAmortizations(final int upToDayIndex,
- final Map
- * A declining-balance schedule does not price every period alike - the closing one bills whatever is left rather
- * than a full instalment - so dividing a payment by a single period's instalment measures it against a price most
- * of the periods do not carry. A payment large enough to clear the loan then earns slightly less fee than the
- * periods it cleared actually hold, and the deferred balance closes a cent off zero.
- *
- *
- * Computed for the whole span in one walk, for the same reason the plan itself is: every caller that converts money
- * into fee needs this same conversion, and deriving it separately in each of them is what let them drift apart.
- */
- private List
- * Catch-up periods bill the regular daily payment of whichever rate is in force at the end of the schedule, not
- * {@code expectedPaymentForDay(totalTerm)}: that final period pays only the remainder needed to close the balance,
- * and a one-off closing amount is meaningless repeated across the days needed to recover missed payments.
- */
- private List
+ * A loan with no model at all is not stale - there is nothing to reinterpret and nothing to rebuild from - so this
+ * is deliberately not the negation of "has a model at the current version".
+ */
+ boolean existsByLoanIdAndJsonModelVersionNot(Long loanId, String jsonModelVersion);
+
+ /**
+ * The subset of {@code loanIds} whose stored model predates the calculation now in force, so it has to be rebuilt
+ * from the loan's own history before anything reads or writes it.
+ *
+ *
+ * A model written by an older version parses without complaint - fields the current shape no longer knows are
+ * simply dropped - so nothing fails; the schedule is quietly missing whatever those fields carried, and the next
+ * write persists it that way. Rebuilding from the recorded transactions and rate changes is what restores it. Loans
+ * with no model are not returned: there is nothing stale about them.
+ */
+ @Query("""
+ SELECT model.loan.id FROM ProjectedAmortizationLoanModel model
+ WHERE model.loan.id IN :loanIds
+ AND model.loan.loanStatus IN :allowedLoanStatuses
+ AND model.jsonModelVersion <> :modelVersion
+ """)
+ List
+ * For a model persisted by an earlier version of the calculation. Such a model still parses, so nothing fails: the
+ * fields the current shape no longer knows are dropped, and the schedule is quietly missing whatever they carried
+ * until something writes it back that way for good.
+ *
+ *
+ * Nothing is read out of the model being replaced, which is what makes this safe for a version bump of any size:
+ * the model is suspect by definition here, so a rebuild that consulted it would inherit whatever the older shape
+ * had lost. Every input comes from a table the model does not own.
+ */
+ void rebuildScheduleModelFromRecordedHistory(WorkingCapitalLoan loan);
+
/**
* After a discount fee adjustment: regenerates the projected schedule with the new loan-level discount (as on
* disbursement generation) and re-applies recorded actual repayments only.
diff --git a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanAmortizationScheduleWriteServiceImpl.java b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanAmortizationScheduleWriteServiceImpl.java
index 9c9a4e9a1bb..8f91d4b9d5d 100644
--- a/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanAmortizationScheduleWriteServiceImpl.java
+++ b/fineract-working-capital-loan/src/main/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanAmortizationScheduleWriteServiceImpl.java
@@ -22,24 +22,30 @@
import java.math.MathContext;
import java.time.LocalDate;
import java.time.OffsetDateTime;
+import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Stream;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.Validate;
import org.apache.fineract.infrastructure.core.service.DateUtils;
+import org.apache.fineract.infrastructure.core.service.MathUtil;
import org.apache.fineract.organisation.monetary.data.CurrencyData;
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanTransactionType;
import org.apache.fineract.portfolio.workingcapitalloan.calc.ProjectedAmortizationScheduleModel;
import org.apache.fineract.portfolio.workingcapitalloan.data.ProjectedAmortizationScheduleGenerateRequest;
import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan;
import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanDisbursementDetails;
import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanPeriodPaymentRateChange;
+import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransaction;
+import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoanTransactionAllocation;
import org.apache.fineract.portfolio.workingcapitalloan.exception.WorkingCapitalLoanEirNotCalculableException;
import org.apache.fineract.portfolio.workingcapitalloan.exception.WorkingCapitalLoanNotFoundException;
import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanPeriodPaymentRateChangeRepository;
import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanRepository;
+import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanTransactionRepository;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -56,6 +62,7 @@ public class WorkingCapitalLoanAmortizationScheduleWriteServiceImpl implements W
private final WorkingCapitalLoanRepository loanRepository;
private final ProjectedAmortizationScheduleRepositoryWrapper scheduleRepositoryWrapper;
private final WorkingCapitalLoanPeriodPaymentRateChangeRepository rateChangeRepository;
+ private final WorkingCapitalLoanTransactionRepository transactionRepository;
// Deliberately a different tie-break from the allocation replay's (which leads with the submitted-on date, matching
// the core loan module). This stream mixes payments with rate changes, and creation time is the only key both carry
@@ -295,7 +302,6 @@ public void applyRepayment(final WorkingCapitalLoan loan, final LocalDate transa
.orElseThrow(() -> new IllegalStateException("Projected amortization schedule is not found for loan " + loan.getId()));
model.applyPayment(transactionDate, repaymentAmount);
- model.recalculateNetAmortizationAndDeferredBalanceFrom(transactionDate);
scheduleRepositoryWrapper.writeModel(loan, model);
}
@@ -323,19 +329,76 @@ public void regenerateAmortizationScheduleOnRateChange(final WorkingCapitalLoan
.orElseThrow(() -> new IllegalStateException("Projected amortization schedule is not found for loan " + loan.getId()));
// Rebuilt from scratch rather than split in place: rate changes are effective-dated, so a backdated one has to
- // land ahead of the changes that follow it, and applyRateChange drops every segment at or after its own split.
- // Reconstruction replays them all in effective-date order instead. The source transactions are not retained by
- // the model, so payments and adjustments are carried over from the model being replaced.
+ // land ahead of the changes that follow it, and applyRateChange can only append - it rejects a date that
+ // precedes a change already recorded, because each change is sized against the balance and unearned fee reached
+ // on its own day. Reconstruction replays them all in effective-date order instead, which is the only order that
+ // method accepts. The source transactions are not retained by the model, so payments and adjustments are
+ // carried over from the model being replaced.
final List
+ * Deliberately not read back out of the model, unlike every other rebuild here. The model is the thing being
+ * replaced, and it is being replaced because an older version of the calculation wrote it - so whatever it says
+ * about itself is exactly what cannot be trusted. The transactions and the allocation rows against them are the
+ * record of what actually happened, and they are what a rebuild has to start from if a future version is to be free
+ * to change the model's shape however it likes. This is what the progressive term-loan rebuild does, for the same
+ * reason.
+ *
+ *
+ * Which transactions contribute, and as what, follows the transaction replay in
+ * {@code WorkingCapitalLoanTransactionReprocessingServiceImpl}: a charge-off moves no principal and contributes
+ * nothing; a credit balance refund contributes the part of itself no overpayment was backing, as a principal
+ * adjustment on its own date; every other repayment-like transaction contributes the principal its allocation
+ * records. A transaction never allocated has nothing to say about principal and is skipped.
+ */
+ private void collectPrincipalHistory(final WorkingCapitalLoan loan, final List
+ * The model is persisted as JSON, and JSON written by an older version still parses: fields the current shape no longer
+ * knows are dropped without complaint. So a stale model does not fail, it silently loses whatever those fields carried
+ * - and the next write persists the loss. The loan's transactions, the principal allocated to each of them, and its
+ * rate changes are all kept outside the model, so replaying those is what restores the schedule - and is why a version
+ * bump may change the model's shape however it needs to.
+ *
+ *
+ * This is why the model carries its version at all. Mirrors {@code ProgressiveLoanModelProcessingService}, which does
+ * the same for progressive term loans.
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class WorkingCapitalLoanModelProcessingService {
+
+ /**
+ * A rebuild replays the recorded transactions, so it is meaningful only for a loan that has some. Statuses before
+ * disbursement have no schedule to rebuild, and a written-off loan's schedule is frozen at write-off.
+ */
+ private static final List
+ * In its own transaction, so a loan whose history cannot be replayed - a rate that no longer solves, say - is
+ * skipped rather than failing the batch that swept it up. The stale model is left in place for that loan: worse
+ * than a rebuilt one, but the rebuild is a repair, and a repair that cannot be made must not take the caller down
+ * with it.
+ */
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
+ public void recalculateModelAndSave(final Long loanId) {
+ loanRepository.findById(loanId).ifPresent(loan -> {
+ try {
+ scheduleWriteService.rebuildScheduleModelFromRecordedHistory(loan);
+ } catch (final RuntimeException e) {
+ log.error("Could not rebuild the amortization model of working capital loan {} at version {}", loanId,
+ ProjectedAmortizationScheduleModel.getModelVersion(), e);
+ }
+ });
+ }
+}
diff --git a/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleCalculatorTest.java b/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleCalculatorTest.java
index 03927bc6b1b..8fed5a5c8a6 100644
--- a/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleCalculatorTest.java
+++ b/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/calc/ProjectedAmortizationScheduleCalculatorTest.java
@@ -87,12 +87,12 @@ void testAddDisbursement_term10_discountFee50_netDisbursement450_then430() {
checkInst(model1, 2, 2, LocalDate.of(2019, 1, 3), 2, 50.00, null, 0.96186652, 48.09, 366.86, null, 8.03, null, null, 33.14, null);
checkInst(model1, 3, 3, LocalDate.of(2019, 1, 4), 3, 50.00, null, 0.94334860, 47.17, 324.06, null, 7.20, null, null, 25.94, null);
checkInst(model1, 4, 4, LocalDate.of(2019, 1, 5), 4, 50.00, null, 0.92518720, 46.26, 280.42, null, 6.36, null, null, 19.58, null);
- checkInst(model1, 5, 5, LocalDate.of(2019, 1, 6), 5, 50.00, null, 0.90737544, 45.37, 235.93, null, 5.50, null, null, 14.08, null);
- checkInst(model1, 6, 6, LocalDate.of(2019, 1, 7), 6, 50.00, null, 0.88990659, 44.50, 190.56, null, 4.63, null, null, 9.45, null);
- checkInst(model1, 7, 7, LocalDate.of(2019, 1, 8), 7, 50.00, null, 0.87277405, 43.64, 144.30, null, 3.74, null, null, 5.71, null);
- checkInst(model1, 8, 8, LocalDate.of(2019, 1, 9), 8, 50.00, null, 0.85597135, 42.80, 97.13, null, 2.83, null, null, 2.88, null);
- checkInst(model1, 9, 9, LocalDate.of(2019, 1, 10), 9, 50.00, null, 0.83949214, 41.97, 49.04, null, 1.91, null, null, 0.97, null);
- checkInst(model1, 10, 10, LocalDate.of(2019, 1, 11), 10, 50.00, null, 0.82333018, 41.17, 0.00, null, 0.97, null, null, 0.00, null);
+ checkInst(model1, 5, 5, LocalDate.of(2019, 1, 6), 5, 50.00, null, 0.90737544, 45.37, 235.93, null, 5.51, null, null, 14.07, null);
+ checkInst(model1, 6, 6, LocalDate.of(2019, 1, 7), 6, 50.00, null, 0.88990659, 44.50, 190.56, null, 4.63, null, null, 9.44, null);
+ checkInst(model1, 7, 7, LocalDate.of(2019, 1, 8), 7, 50.00, null, 0.87277405, 43.64, 144.30, null, 3.74, null, null, 5.70, null);
+ checkInst(model1, 8, 8, LocalDate.of(2019, 1, 9), 8, 50.00, null, 0.85597135, 42.80, 97.13, null, 2.83, null, null, 2.87, null);
+ checkInst(model1, 9, 9, LocalDate.of(2019, 1, 10), 9, 50.00, null, 0.83949214, 41.97, 49.04, null, 1.91, null, null, 0.96, null);
+ checkInst(model1, 10, 10, LocalDate.of(2019, 1, 11), 10, 50.00, null, 0.82333018, 41.17, 0.00, null, 0.96, null, null, 0.00, null);
final BigDecimal newNetDisbursement = new BigDecimal("430");
final LocalDate newDisbursementDate = LocalDate.of(2019, 1, 5);
@@ -108,12 +108,12 @@ void testAddDisbursement_term10_discountFee50_netDisbursement450_then430() {
checkInst(model2, 1, 1, LocalDate.of(2019, 1, 6), 1, 50.00, null, 0.97919271, 48.96, 389.14, null, 9.14, null, null, 40.86, null);
checkInst(model2, 2, 2, LocalDate.of(2019, 1, 7), 2, 50.00, null, 0.95881836, 47.94, 347.41, null, 8.27, null, null, 32.59, null);
checkInst(model2, 3, 3, LocalDate.of(2019, 1, 8), 3, 50.00, null, 0.93886795, 46.94, 304.79, null, 7.38, null, null, 25.21, null);
- checkInst(model2, 4, 4, LocalDate.of(2019, 1, 9), 4, 50.00, null, 0.91933266, 45.97, 261.26, null, 6.48, null, null, 18.73, null);
- checkInst(model2, 5, 5, LocalDate.of(2019, 1, 10), 5, 50.00, null, 0.90020383, 45.01, 216.82, null, 5.55, null, null, 13.18, null);
- checkInst(model2, 6, 6, LocalDate.of(2019, 1, 11), 6, 50.00, null, 0.88147303, 44.07, 171.42, null, 4.61, null, null, 8.57, null);
- checkInst(model2, 7, 7, LocalDate.of(2019, 1, 12), 7, 50.00, null, 0.86313197, 43.16, 125.07, null, 3.64, null, null, 4.93, null);
- checkInst(model2, 8, 8, LocalDate.of(2019, 1, 13), 8, 50.00, null, 0.84517253, 42.26, 77.72, null, 2.66, null, null, 2.27, null);
- checkInst(model2, 9, 9, LocalDate.of(2019, 1, 14), 9, 50.00, null, 0.82758678, 41.38, 29.38, null, 1.65, null, null, 0.62, null);
+ checkInst(model2, 4, 4, LocalDate.of(2019, 1, 9), 4, 50.00, null, 0.91933266, 45.97, 261.26, null, 6.47, null, null, 18.74, null);
+ checkInst(model2, 5, 5, LocalDate.of(2019, 1, 10), 5, 50.00, null, 0.90020383, 45.01, 216.82, null, 5.56, null, null, 13.18, null);
+ checkInst(model2, 6, 6, LocalDate.of(2019, 1, 11), 6, 50.00, null, 0.88147303, 44.07, 171.42, null, 4.60, null, null, 8.58, null);
+ checkInst(model2, 7, 7, LocalDate.of(2019, 1, 12), 7, 50.00, null, 0.86313197, 43.16, 125.07, null, 3.65, null, null, 4.93, null);
+ checkInst(model2, 8, 8, LocalDate.of(2019, 1, 13), 8, 50.00, null, 0.84517253, 42.26, 77.72, null, 2.65, null, null, 2.28, null);
+ checkInst(model2, 9, 9, LocalDate.of(2019, 1, 14), 9, 50.00, null, 0.82758678, 41.38, 29.38, null, 1.66, null, null, 0.62, null);
checkInst(model2, 10, 10, LocalDate.of(2019, 1, 15), 10, 30.00, null, 0.81036694, 24.31, 0.00, null, 0.62, null, null, 0.00, null);
}
@@ -134,388 +134,388 @@ void testProjectedSchedule_term200_discountFee1000_netDisbursement9000() {
checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 6, 50.00, null, 0.99361699, 49.68, 8757.01, null, 9.39, null, null, 942.99, null);
checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 7, 50.00, null, 0.99255712, 49.63, 8716.36, null, 9.35, null, null, 933.64, null);
checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 8, 50.00, null, 0.99149839, 49.57, 8675.67, null, 9.31, null, null, 924.33, null);
- checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 9, 50.00, null, 0.99044078, 49.52, 8634.94, null, 9.26, null, null, 915.07, null);
- checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 10, 50.00, null, 0.98938430, 49.47, 8594.16, null, 9.22, null, null, 905.85,
+ checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 9, 50.00, null, 0.99044078, 49.52, 8634.94, null, 9.27, null, null, 915.06, null);
+ checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 10, 50.00, null, 0.98938430, 49.47, 8594.16, null, 9.22, null, null, 905.84,
null);
- checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 11, 50.00, null, 0.98832895, 49.42, 8553.33, null, 9.18, null, null, 896.67,
+ checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 11, 50.00, null, 0.98832895, 49.42, 8553.33, null, 9.17, null, null, 896.67,
null);
- checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 12, 50.00, null, 0.98727472, 49.36, 8512.47, null, 9.13, null, null, 887.54,
+ checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 12, 50.00, null, 0.98727472, 49.36, 8512.47, null, 9.14, null, null, 887.53,
null);
- checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 13, 50.00, null, 0.98622162, 49.31, 8471.56, null, 9.09, null, null, 878.45,
+ checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 13, 50.00, null, 0.98622162, 49.31, 8471.56, null, 9.09, null, null, 878.44,
null);
- checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 14, 50.00, null, 0.98516964, 49.26, 8430.60, null, 9.05, null, null, 869.40,
+ checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 14, 50.00, null, 0.98516964, 49.26, 8430.60, null, 9.04, null, null, 869.40,
null);
- checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 15, 50.00, null, 0.98411879, 49.21, 8389.61, null, 9.00, null, null, 860.40,
+ checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 15, 50.00, null, 0.98411879, 49.21, 8389.61, null, 9.01, null, null, 860.39,
null);
- checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 16, 50.00, null, 0.98306905, 49.15, 8348.56, null, 8.96, null, null, 851.44,
+ checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 16, 50.00, null, 0.98306905, 49.15, 8348.56, null, 8.95, null, null, 851.44,
null);
- checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 17, 50.00, null, 0.98202044, 49.10, 8307.48, null, 8.91, null, null, 842.53,
+ checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 17, 50.00, null, 0.98202044, 49.10, 8307.48, null, 8.92, null, null, 842.52,
null);
- checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 18, 50.00, null, 0.98097294, 49.05, 8266.35, null, 8.87, null, null, 833.66,
+ checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 18, 50.00, null, 0.98097294, 49.05, 8266.35, null, 8.87, null, null, 833.65,
null);
- checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 19, 50.00, null, 0.97992656, 49.00, 8225.18, null, 8.83, null, null, 824.83,
+ checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 19, 50.00, null, 0.97992656, 49.00, 8225.18, null, 8.83, null, null, 824.82,
null);
- checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 20, 50.00, null, 0.97888129, 48.94, 8183.96, null, 8.78, null, null, 816.05,
+ checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 20, 50.00, null, 0.97888129, 48.94, 8183.96, null, 8.78, null, null, 816.04,
null);
- checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 21, 50.00, null, 0.97783715, 48.89, 8142.70, null, 8.74, null, null, 807.31,
+ checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 21, 50.00, null, 0.97783715, 48.89, 8142.70, null, 8.74, null, null, 807.30,
null);
- checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 22, 50.00, null, 0.97679411, 48.84, 8101.39, null, 8.69, null, null, 798.62,
+ checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 22, 50.00, null, 0.97679411, 48.84, 8101.39, null, 8.69, null, null, 798.61,
null);
- checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 23, 50.00, null, 0.97575219, 48.79, 8060.04, null, 8.65, null, null, 789.97,
+ checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 23, 50.00, null, 0.97575219, 48.79, 8060.04, null, 8.65, null, null, 789.96,
null);
- checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 24, 50.00, null, 0.97471138, 48.74, 8018.65, null, 8.61, null, null, 781.36,
+ checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 24, 50.00, null, 0.97471138, 48.74, 8018.65, null, 8.61, null, null, 781.35,
null);
- checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 25, 50.00, null, 0.97367168, 48.68, 7977.21, null, 8.56, null, null, 772.80,
+ checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 25, 50.00, null, 0.97367168, 48.68, 7977.21, null, 8.56, null, null, 772.79,
null);
- checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 26, 50.00, null, 0.97263309, 48.63, 7935.73, null, 8.52, null, null, 764.28,
+ checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 26, 50.00, null, 0.97263309, 48.63, 7935.73, null, 8.52, null, null, 764.27,
null);
- checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 27, 50.00, null, 0.97159560, 48.58, 7894.21, null, 8.47, null, null, 755.81,
+ checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 27, 50.00, null, 0.97159560, 48.58, 7894.21, null, 8.48, null, null, 755.79,
null);
- checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 28, 50.00, null, 0.97055922, 48.53, 7852.63, null, 8.43, null, null, 747.38,
+ checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 28, 50.00, null, 0.97055922, 48.53, 7852.63, null, 8.42, null, null, 747.37,
null);
- checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 29, 50.00, null, 0.96952395, 48.48, 7811.02, null, 8.39, null, null, 738.99,
+ checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 29, 50.00, null, 0.96952395, 48.48, 7811.02, null, 8.39, null, null, 738.98,
null);
- checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 30, 50.00, null, 0.96848979, 48.42, 7769.36, null, 8.34, null, null, 730.65,
+ checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 30, 50.00, null, 0.96848979, 48.42, 7769.36, null, 8.34, null, null, 730.64,
null);
- checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 31, 50.00, null, 0.96745672, 48.37, 7727.66, null, 8.30, null, null, 722.35,
+ checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 31, 50.00, null, 0.96745672, 48.37, 7727.66, null, 8.30, null, null, 722.34,
null);
- checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 32, 50.00, null, 0.96642476, 48.32, 7685.91, null, 8.25, null, null, 714.10,
+ checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 32, 50.00, null, 0.96642476, 48.32, 7685.91, null, 8.25, null, null, 714.09,
null);
- checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 33, 50.00, null, 0.96539390, 48.27, 7644.12, null, 8.21, null, null, 705.89,
+ checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 33, 50.00, null, 0.96539390, 48.27, 7644.12, null, 8.21, null, null, 705.88,
null);
- checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 34, 50.00, null, 0.96436413, 48.22, 7602.28, null, 8.16, null, null, 697.73,
+ checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 34, 50.00, null, 0.96436413, 48.22, 7602.28, null, 8.16, null, null, 697.72,
null);
- checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 35, 50.00, null, 0.96333547, 48.17, 7560.40, null, 8.12, null, null, 689.61,
+ checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 35, 50.00, null, 0.96333547, 48.17, 7560.40, null, 8.12, null, null, 689.60,
null);
- checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 36, 50.00, null, 0.96230790, 48.12, 7518.47, null, 8.07, null, null, 681.54,
+ checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 36, 50.00, null, 0.96230790, 48.12, 7518.47, null, 8.07, null, null, 681.53,
null);
- checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 37, 50.00, null, 0.96128143, 48.06, 7476.50, null, 8.03, null, null, 673.51,
+ checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 37, 50.00, null, 0.96128143, 48.06, 7476.50, null, 8.03, null, null, 673.50,
null);
- checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 38, 50.00, null, 0.96025606, 48.01, 7434.48, null, 7.98, null, null, 665.53,
+ checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 38, 50.00, null, 0.96025606, 48.01, 7434.48, null, 7.98, null, null, 665.52,
null);
- checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 39, 50.00, null, 0.95923178, 47.96, 7392.42, null, 7.94, null, null, 657.59,
+ checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 39, 50.00, null, 0.95923178, 47.96, 7392.42, null, 7.94, null, null, 657.58,
null);
- checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 40, 50.00, null, 0.95820859, 47.91, 7350.31, null, 7.89, null, null, 649.70,
+ checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 40, 50.00, null, 0.95820859, 47.91, 7350.31, null, 7.89, null, null, 649.69,
null);
- checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 41, 50.00, null, 0.95718649, 47.86, 7308.16, null, 7.85, null, null, 641.85,
+ checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 41, 50.00, null, 0.95718649, 47.86, 7308.16, null, 7.85, null, null, 641.84,
null);
- checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 42, 50.00, null, 0.95616548, 47.81, 7265.97, null, 7.80, null, null, 634.05,
+ checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 42, 50.00, null, 0.95616548, 47.81, 7265.97, null, 7.81, null, null, 634.03,
null);
- checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 43, 50.00, null, 0.95514557, 47.76, 7223.72, null, 7.76, null, null, 626.29,
+ checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 43, 50.00, null, 0.95514557, 47.76, 7223.72, null, 7.75, null, null, 626.28,
null);
- checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 44, 50.00, null, 0.95412674, 47.71, 7181.44, null, 7.71, null, null, 618.58,
+ checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 44, 50.00, null, 0.95412674, 47.71, 7181.44, null, 7.72, null, null, 618.56,
null);
- checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 45, 50.00, null, 0.95310899, 47.66, 7139.11, null, 7.67, null, null, 610.91,
+ checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 45, 50.00, null, 0.95310899, 47.66, 7139.11, null, 7.67, null, null, 610.89,
null);
- checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 46, 50.00, null, 0.95209233, 47.60, 7096.73, null, 7.62, null, null, 603.29,
+ checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 46, 50.00, null, 0.95209233, 47.60, 7096.73, null, 7.62, null, null, 603.27,
null);
- checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 47, 50.00, null, 0.95107676, 47.55, 7054.31, null, 7.58, null, null, 595.71,
+ checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 47, 50.00, null, 0.95107676, 47.55, 7054.31, null, 7.58, null, null, 595.69,
null);
- checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 48, 50.00, null, 0.95006227, 47.50, 7011.84, null, 7.53, null, null, 588.18,
+ checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 48, 50.00, null, 0.95006227, 47.50, 7011.84, null, 7.53, null, null, 588.16,
null);
- checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 49, 50.00, null, 0.94904886, 47.45, 6969.33, null, 7.49, null, null, 580.69,
+ checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 49, 50.00, null, 0.94904886, 47.45, 6969.33, null, 7.49, null, null, 580.67,
null);
- checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 50, 50.00, null, 0.94803653, 47.40, 6926.77, null, 7.44, null, null, 573.25,
+ checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 50, 50.00, null, 0.94803653, 47.40, 6926.77, null, 7.44, null, null, 573.23,
null);
- checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 51, 50.00, null, 0.94702529, 47.35, 6884.17, null, 7.40, null, null, 565.85,
+ checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 51, 50.00, null, 0.94702529, 47.35, 6884.17, null, 7.40, null, null, 565.83,
null);
- checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 52, 50.00, null, 0.94601512, 47.30, 6841.52, null, 7.35, null, null, 558.50,
+ checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 52, 50.00, null, 0.94601512, 47.30, 6841.52, null, 7.35, null, null, 558.48,
null);
- checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 53, 50.00, null, 0.94500603, 47.25, 6798.82, null, 7.31, null, null, 551.19,
+ checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 53, 50.00, null, 0.94500603, 47.25, 6798.82, null, 7.30, null, null, 551.18,
null);
- checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 54, 50.00, null, 0.94399801, 47.20, 6756.08, null, 7.26, null, null, 543.93,
+ checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 54, 50.00, null, 0.94399801, 47.20, 6756.08, null, 7.26, null, null, 543.92,
null);
- checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 55, 50.00, null, 0.94299107, 47.15, 6713.30, null, 7.21, null, null, 536.72,
+ checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 55, 50.00, null, 0.94299107, 47.15, 6713.30, null, 7.22, null, null, 536.70,
null);
- checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 56, 50.00, null, 0.94198521, 47.10, 6670.47, null, 7.17, null, null, 529.55,
+ checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 56, 50.00, null, 0.94198521, 47.10, 6670.47, null, 7.17, null, null, 529.53,
null);
- checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 57, 50.00, null, 0.94098042, 47.05, 6627.59, null, 7.12, null, null, 522.43,
+ checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 57, 50.00, null, 0.94098042, 47.05, 6627.59, null, 7.12, null, null, 522.41,
null);
- checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 58, 50.00, null, 0.93997669, 47.00, 6584.67, null, 7.08, null, null, 515.35,
+ checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 58, 50.00, null, 0.93997669, 47.00, 6584.67, null, 7.08, null, null, 515.33,
null);
- checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 59, 50.00, null, 0.93897404, 46.95, 6541.70, null, 7.03, null, null, 508.32,
+ checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 59, 50.00, null, 0.93897404, 46.95, 6541.70, null, 7.03, null, null, 508.30,
null);
- checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 60, 50.00, null, 0.93797246, 46.90, 6498.68, null, 6.99, null, null, 501.33,
+ checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 60, 50.00, null, 0.93797246, 46.90, 6498.68, null, 6.98, null, null, 501.32,
null);
- checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 61, 50.00, null, 0.93697195, 46.85, 6455.62, null, 6.94, null, null, 494.39,
+ checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 61, 50.00, null, 0.93697195, 46.85, 6455.62, null, 6.94, null, null, 494.38,
null);
- checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 62, 50.00, null, 0.93597251, 46.80, 6412.51, null, 6.89, null, null, 487.50,
+ checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 62, 50.00, null, 0.93597251, 46.80, 6412.51, null, 6.89, null, null, 487.49,
null);
- checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 63, 50.00, null, 0.93497413, 46.75, 6369.36, null, 6.85, null, null, 480.65,
+ checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 63, 50.00, null, 0.93497413, 46.75, 6369.36, null, 6.85, null, null, 480.64,
null);
- checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 64, 50.00, null, 0.93397681, 46.70, 6326.16, null, 6.80, null, null, 473.85,
+ checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 64, 50.00, null, 0.93397681, 46.70, 6326.16, null, 6.80, null, null, 473.84,
null);
- checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 65, 50.00, null, 0.93298056, 46.65, 6282.92, null, 6.76, null, null, 467.09,
+ checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 65, 50.00, null, 0.93298056, 46.65, 6282.92, null, 6.76, null, null, 467.08,
null);
- checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 66, 50.00, null, 0.93198538, 46.60, 6239.63, null, 6.71, null, null, 460.38,
+ checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 66, 50.00, null, 0.93198538, 46.60, 6239.63, null, 6.71, null, null, 460.37,
null);
- checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 67, 50.00, null, 0.93099125, 46.55, 6196.29, null, 6.66, null, null, 453.72,
+ checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 67, 50.00, null, 0.93099125, 46.55, 6196.29, null, 6.66, null, null, 453.71,
null);
- checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 68, 50.00, null, 0.92999818, 46.50, 6152.91, null, 6.62, null, null, 447.10,
+ checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 68, 50.00, null, 0.92999818, 46.50, 6152.91, null, 6.62, null, null, 447.09,
null);
- checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 69, 50.00, null, 0.92900618, 46.45, 6109.48, null, 6.57, null, null, 440.53,
+ checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 69, 50.00, null, 0.92900618, 46.45, 6109.48, null, 6.57, null, null, 440.52,
null);
- checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 70, 50.00, null, 0.92801523, 46.40, 6066.00, null, 6.52, null, null, 434.01,
+ checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 70, 50.00, null, 0.92801523, 46.40, 6066.00, null, 6.52, null, null, 434.00,
null);
- checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 71, 50.00, null, 0.92702534, 46.35, 6022.48, null, 6.48, null, null, 427.53,
+ checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 71, 50.00, null, 0.92702534, 46.35, 6022.48, null, 6.48, null, null, 427.52,
null);
- checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 72, 50.00, null, 0.92603650, 46.30, 5978.91, null, 6.43, null, null, 421.10,
+ checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 72, 50.00, null, 0.92603650, 46.30, 5978.91, null, 6.43, null, null, 421.09,
null);
- checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 73, 50.00, null, 0.92504872, 46.25, 5935.29, null, 6.38, null, null, 414.72,
+ checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 73, 50.00, null, 0.92504872, 46.25, 5935.29, null, 6.38, null, null, 414.71,
null);
- checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 74, 50.00, null, 0.92406200, 46.20, 5891.63, null, 6.34, null, null, 408.38,
+ checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 74, 50.00, null, 0.92406200, 46.20, 5891.63, null, 6.34, null, null, 408.37,
null);
- checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 75, 50.00, null, 0.92307632, 46.15, 5847.92, null, 6.29, null, null, 402.09,
+ checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 75, 50.00, null, 0.92307632, 46.15, 5847.92, null, 6.29, null, null, 402.08,
null);
- checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 76, 50.00, null, 0.92209170, 46.10, 5804.17, null, 6.24, null, null, 395.85,
+ checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 76, 50.00, null, 0.92209170, 46.10, 5804.17, null, 6.25, null, null, 395.83,
null);
- checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 77, 50.00, null, 0.92110813, 46.06, 5760.36, null, 6.20, null, null, 389.65,
+ checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 77, 50.00, null, 0.92110813, 46.06, 5760.36, null, 6.19, null, null, 389.64,
null);
- checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 78, 50.00, null, 0.92012560, 46.01, 5716.52, null, 6.15, null, null, 383.50,
+ checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 78, 50.00, null, 0.92012560, 46.01, 5716.52, null, 6.16, null, null, 383.48,
null);
- checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 79, 50.00, null, 0.91914413, 45.96, 5672.62, null, 6.10, null, null, 377.40,
+ checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 79, 50.00, null, 0.91914413, 45.96, 5672.62, null, 6.10, null, null, 377.38,
null);
- checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 80, 50.00, null, 0.91816370, 45.91, 5628.68, null, 6.06, null, null, 371.34,
+ checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 80, 50.00, null, 0.91816370, 45.91, 5628.68, null, 6.06, null, null, 371.32,
null);
- checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 81, 50.00, null, 0.91718432, 45.86, 5584.69, null, 6.01, null, null, 365.33,
+ checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 81, 50.00, null, 0.91718432, 45.86, 5584.69, null, 6.01, null, null, 365.31,
null);
- checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 82, 50.00, null, 0.91620598, 45.81, 5540.65, null, 5.96, null, null, 359.37,
+ checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 82, 50.00, null, 0.91620598, 45.81, 5540.65, null, 5.96, null, null, 359.35,
null);
- checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 83, 50.00, null, 0.91522868, 45.76, 5496.57, null, 5.92, null, null, 353.45,
+ checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 83, 50.00, null, 0.91522868, 45.76, 5496.57, null, 5.92, null, null, 353.43,
null);
- checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 84, 50.00, null, 0.91425243, 45.71, 5452.44, null, 5.87, null, null, 347.58,
+ checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 84, 50.00, null, 0.91425243, 45.71, 5452.44, null, 5.87, null, null, 347.56,
null);
- checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 85, 50.00, null, 0.91327722, 45.66, 5408.26, null, 5.82, null, null, 341.76,
+ checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 85, 50.00, null, 0.91327722, 45.66, 5408.26, null, 5.82, null, null, 341.74,
null);
- checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 86, 50.00, null, 0.91230305, 45.62, 5364.03, null, 5.78, null, null, 335.98,
+ checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 86, 50.00, null, 0.91230305, 45.62, 5364.03, null, 5.77, null, null, 335.97,
null);
- checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 87, 50.00, null, 0.91132992, 45.57, 5319.76, null, 5.73, null, null, 330.25,
+ checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 87, 50.00, null, 0.91132992, 45.57, 5319.76, null, 5.73, null, null, 330.24,
null);
- checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 88, 50.00, null, 0.91035783, 45.52, 5275.44, null, 5.68, null, null, 324.57,
+ checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 88, 50.00, null, 0.91035783, 45.52, 5275.44, null, 5.68, null, null, 324.56,
null);
- checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 89, 50.00, null, 0.90938677, 45.47, 5231.08, null, 5.63, null, null, 318.94,
+ checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 89, 50.00, null, 0.90938677, 45.47, 5231.08, null, 5.64, null, null, 318.92,
null);
- checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 90, 50.00, null, 0.90841675, 45.42, 5186.66, null, 5.59, null, null, 313.35,
+ checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 90, 50.00, null, 0.90841675, 45.42, 5186.66, null, 5.58, null, null, 313.34,
null);
- checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 91, 50.00, null, 0.90744776, 45.37, 5142.20, null, 5.54, null, null, 307.81,
+ checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 91, 50.00, null, 0.90744776, 45.37, 5142.20, null, 5.54, null, null, 307.80,
null);
- checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 92, 50.00, null, 0.90647981, 45.32, 5097.69, null, 5.49, null, null, 302.32,
+ checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 92, 50.00, null, 0.90647981, 45.32, 5097.69, null, 5.49, null, null, 302.31,
null);
- checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 93, 50.00, null, 0.90551289, 45.28, 5053.13, null, 5.44, null, null, 296.88,
+ checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 93, 50.00, null, 0.90551289, 45.28, 5053.13, null, 5.44, null, null, 296.87,
null);
- checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 94, 50.00, null, 0.90454700, 45.23, 5008.53, null, 5.40, null, null, 291.48,
+ checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 94, 50.00, null, 0.90454700, 45.23, 5008.53, null, 5.40, null, null, 291.47,
null);
- checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 95, 50.00, null, 0.90358215, 45.18, 4963.88, null, 5.35, null, null, 286.13,
+ checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 95, 50.00, null, 0.90358215, 45.18, 4963.88, null, 5.35, null, null, 286.12,
null);
- checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 96, 50.00, null, 0.90261832, 45.13, 4919.18, null, 5.30, null, null, 280.83,
+ checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 96, 50.00, null, 0.90261832, 45.13, 4919.18, null, 5.30, null, null, 280.82,
null);
- checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 97, 50.00, null, 0.90165552, 45.08, 4874.43, null, 5.25, null, null, 275.58,
+ checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 97, 50.00, null, 0.90165552, 45.08, 4874.43, null, 5.25, null, null, 275.57,
null);
- checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 98, 50.00, null, 0.90069374, 45.03, 4829.64, null, 5.20, null, null, 270.38,
+ checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 98, 50.00, null, 0.90069374, 45.03, 4829.64, null, 5.21, null, null, 270.36,
null);
- checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 99, 50.00, null, 0.89973299, 44.99, 4784.79, null, 5.16, null, null, 265.22,
+ checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 99, 50.00, null, 0.89973299, 44.99, 4784.79, null, 5.15, null, null, 265.21,
null);
- checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 100, 50.00, null, 0.89877327, 44.94, 4739.90, null, 5.11, null, null, 260.11,
+ checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 100, 50.00, null, 0.89877327, 44.94, 4739.90, null, 5.11, null, null, 260.10,
null);
- checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 101, 50.00, null, 0.89781457, 44.89, 4694.96, null, 5.06, null, null, 255.05,
+ checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 101, 50.00, null, 0.89781457, 44.89, 4694.96, null, 5.06, null, null, 255.04,
null);
- checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 102, 50.00, null, 0.89685689, 44.84, 4649.98, null, 5.01, null, null, 250.04,
+ checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 102, 50.00, null, 0.89685689, 44.84, 4649.98, null, 5.02, null, null, 250.02,
null);
- checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 103, 50.00, null, 0.89590024, 44.80, 4604.94, null, 4.97, null, null, 245.07,
+ checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 103, 50.00, null, 0.89590024, 44.80, 4604.94, null, 4.96, null, null, 245.06,
null);
- checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 104, 50.00, null, 0.89494460, 44.75, 4559.86, null, 4.92, null, null, 240.15,
+ checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 104, 50.00, null, 0.89494460, 44.75, 4559.86, null, 4.92, null, null, 240.14,
null);
- checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 105, 50.00, null, 0.89398999, 44.70, 4514.73, null, 4.87, null, null, 235.28,
+ checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 105, 50.00, null, 0.89398999, 44.70, 4514.73, null, 4.87, null, null, 235.27,
null);
- checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 106, 50.00, null, 0.89303639, 44.65, 4469.55, null, 4.82, null, null, 230.46,
+ checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 106, 50.00, null, 0.89303639, 44.65, 4469.55, null, 4.82, null, null, 230.45,
null);
- checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 107, 50.00, null, 0.89208381, 44.60, 4424.32, null, 4.77, null, null, 225.69,
+ checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 107, 50.00, null, 0.89208381, 44.60, 4424.32, null, 4.77, null, null, 225.68,
null);
- checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 108, 50.00, null, 0.89113225, 44.56, 4379.05, null, 4.72, null, null, 220.97,
+ checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 108, 50.00, null, 0.89113225, 44.56, 4379.05, null, 4.73, null, null, 220.95,
null);
- checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 109, 50.00, null, 0.89018170, 44.51, 4333.72, null, 4.68, null, null, 216.29,
+ checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 109, 50.00, null, 0.89018170, 44.51, 4333.72, null, 4.67, null, null, 216.28,
null);
- checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 110, 50.00, null, 0.88923216, 44.46, 4288.35, null, 4.63, null, null, 211.66,
+ checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 110, 50.00, null, 0.88923216, 44.46, 4288.35, null, 4.63, null, null, 211.65,
null);
- checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 111, 50.00, null, 0.88828364, 44.41, 4242.93, null, 4.58, null, null, 207.08,
+ checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 111, 50.00, null, 0.88828364, 44.41, 4242.93, null, 4.58, null, null, 207.07,
null);
- checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 112, 50.00, null, 0.88733613, 44.37, 4197.46, null, 4.53, null, null, 202.55,
+ checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 112, 50.00, null, 0.88733613, 44.37, 4197.46, null, 4.53, null, null, 202.54,
null);
- checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 113, 50.00, null, 0.88638963, 44.32, 4151.94, null, 4.48, null, null, 198.07,
+ checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 113, 50.00, null, 0.88638963, 44.32, 4151.94, null, 4.48, null, null, 198.06,
null);
- checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 114, 50.00, null, 0.88544414, 44.27, 4106.38, null, 4.43, null, null, 193.64,
+ checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 114, 50.00, null, 0.88544414, 44.27, 4106.38, null, 4.44, null, null, 193.62,
null);
- checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 115, 50.00, null, 0.88449966, 44.22, 4060.76, null, 4.38, null, null, 189.26,
+ checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 115, 50.00, null, 0.88449966, 44.22, 4060.76, null, 4.38, null, null, 189.24,
null);
- checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 116, 50.00, null, 0.88355619, 44.18, 4015.10, null, 4.34, null, null, 184.92,
+ checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 116, 50.00, null, 0.88355619, 44.18, 4015.10, null, 4.34, null, null, 184.90,
null);
- checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 117, 50.00, null, 0.88261372, 44.13, 3969.38, null, 4.29, null, null, 180.63,
+ checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 117, 50.00, null, 0.88261372, 44.13, 3969.38, null, 4.28, null, null, 180.62,
null);
- checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 118, 50.00, null, 0.88167226, 44.08, 3923.62, null, 4.24, null, null, 176.39,
+ checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 118, 50.00, null, 0.88167226, 44.08, 3923.62, null, 4.24, null, null, 176.38,
null);
- checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 119, 50.00, null, 0.88073180, 44.04, 3877.81, null, 4.19, null, null, 172.20,
+ checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 119, 50.00, null, 0.88073180, 44.04, 3877.81, null, 4.19, null, null, 172.19,
null);
- checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 120, 50.00, null, 0.87979234, 43.99, 3831.95, null, 4.14, null, null, 168.06,
+ checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 120, 50.00, null, 0.87979234, 43.99, 3831.95, null, 4.14, null, null, 168.05,
null);
- checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 121, 50.00, null, 0.87885389, 43.94, 3786.04, null, 4.09, null, null, 163.97,
+ checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 121, 50.00, null, 0.87885389, 43.94, 3786.04, null, 4.09, null, null, 163.96,
null);
- checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 122, 50.00, null, 0.87791644, 43.90, 3740.09, null, 4.04, null, null, 159.93,
+ checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 122, 50.00, null, 0.87791644, 43.90, 3740.09, null, 4.05, null, null, 159.91,
null);
- checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 123, 50.00, null, 0.87697999, 43.85, 3694.08, null, 3.99, null, null, 155.94,
+ checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 123, 50.00, null, 0.87697999, 43.85, 3694.08, null, 3.99, null, null, 155.92,
null);
- checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 124, 50.00, null, 0.87604453, 43.80, 3648.03, null, 3.94, null, null, 152.00,
+ checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 124, 50.00, null, 0.87604453, 43.80, 3648.03, null, 3.95, null, null, 151.97,
null);
- checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 125, 50.00, null, 0.87511008, 43.76, 3601.92, null, 3.90, null, null, 148.10,
+ checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 125, 50.00, null, 0.87511008, 43.76, 3601.92, null, 3.89, null, null, 148.08,
null);
- checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 126, 50.00, null, 0.87417662, 43.71, 3555.77, null, 3.85, null, null, 144.25,
+ checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 126, 50.00, null, 0.87417662, 43.71, 3555.77, null, 3.85, null, null, 144.23,
null);
- checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 127, 50.00, null, 0.87324416, 43.66, 3509.56, null, 3.80, null, null, 140.45,
+ checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 127, 50.00, null, 0.87324416, 43.66, 3509.56, null, 3.79, null, null, 140.44,
null);
- checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 128, 50.00, null, 0.87231269, 43.62, 3463.31, null, 3.75, null, null, 136.70,
+ checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 128, 50.00, null, 0.87231269, 43.62, 3463.31, null, 3.75, null, null, 136.69,
null);
- checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 129, 50.00, null, 0.87138221, 43.57, 3417.01, null, 3.70, null, null, 133.00,
+ checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 129, 50.00, null, 0.87138221, 43.57, 3417.01, null, 3.70, null, null, 132.99,
null);
- checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 130, 50.00, null, 0.87045273, 43.52, 3370.66, null, 3.65, null, null, 129.35,
+ checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 130, 50.00, null, 0.87045273, 43.52, 3370.66, null, 3.65, null, null, 129.34,
null);
- checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 131, 50.00, null, 0.86952424, 43.48, 3324.26, null, 3.60, null, null, 125.75,
+ checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 131, 50.00, null, 0.86952424, 43.48, 3324.26, null, 3.60, null, null, 125.74,
null);
- checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 132, 50.00, null, 0.86859674, 43.43, 3277.81, null, 3.55, null, null, 122.20,
+ checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 132, 50.00, null, 0.86859674, 43.43, 3277.81, null, 3.55, null, null, 122.19,
null);
- checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 133, 50.00, null, 0.86767023, 43.38, 3231.31, null, 3.50, null, null, 118.70,
+ checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 133, 50.00, null, 0.86767023, 43.38, 3231.31, null, 3.50, null, null, 118.69,
null);
- checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 134, 50.00, null, 0.86674471, 43.34, 3184.76, null, 3.45, null, null, 115.25,
+ checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 134, 50.00, null, 0.86674471, 43.34, 3184.76, null, 3.45, null, null, 115.24,
null);
- checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 135, 50.00, null, 0.86582017, 43.29, 3138.16, null, 3.40, null, null, 111.85,
+ checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 135, 50.00, null, 0.86582017, 43.29, 3138.16, null, 3.40, null, null, 111.84,
null);
- checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 136, 50.00, null, 0.86489662, 43.24, 3091.51, null, 3.35, null, null, 108.50,
+ checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 136, 50.00, null, 0.86489662, 43.24, 3091.51, null, 3.35, null, null, 108.49,
null);
- checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 137, 50.00, null, 0.86397406, 43.20, 3044.81, null, 3.30, null, null, 105.20,
+ checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 137, 50.00, null, 0.86397406, 43.20, 3044.81, null, 3.30, null, null, 105.19,
null);
- checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 138, 50.00, null, 0.86305248, 43.15, 2998.06, null, 3.25, null, null, 101.95,
+ checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 138, 50.00, null, 0.86305248, 43.15, 2998.06, null, 3.25, null, null, 101.94,
null);
- checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 139, 50.00, null, 0.86213188, 43.11, 2951.26, null, 3.20, null, null, 98.75,
+ checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 139, 50.00, null, 0.86213188, 43.11, 2951.26, null, 3.20, null, null, 98.74,
null);
- checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 140, 50.00, null, 0.86121227, 43.06, 2904.42, null, 3.15, null, null, 95.60,
+ checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 140, 50.00, null, 0.86121227, 43.06, 2904.42, null, 3.16, null, null, 95.58,
null);
- checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 141, 50.00, null, 0.86029363, 43.01, 2857.52, null, 3.10, null, null, 92.50,
+ checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 141, 50.00, null, 0.86029363, 43.01, 2857.52, null, 3.10, null, null, 92.48,
null);
- checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 142, 50.00, null, 0.85937598, 42.97, 2810.57, null, 3.05, null, null, 89.45,
+ checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 142, 50.00, null, 0.85937598, 42.97, 2810.57, null, 3.05, null, null, 89.43,
null);
- checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 143, 50.00, null, 0.85845930, 42.92, 2763.57, null, 3.00, null, null, 86.45,
+ checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 143, 50.00, null, 0.85845930, 42.92, 2763.57, null, 3.00, null, null, 86.43,
null);
- checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 144, 50.00, null, 0.85754361, 42.88, 2716.52, null, 2.95, null, null, 83.50,
+ checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 144, 50.00, null, 0.85754361, 42.88, 2716.52, null, 2.95, null, null, 83.48,
null);
- checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 145, 50.00, null, 0.85662889, 42.83, 2669.42, null, 2.90, null, null, 80.60,
+ checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 145, 50.00, null, 0.85662889, 42.83, 2669.42, null, 2.90, null, null, 80.58,
null);
- checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 146, 50.00, null, 0.85571514, 42.79, 2622.27, null, 2.85, null, null, 77.75,
+ checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 146, 50.00, null, 0.85571514, 42.79, 2622.27, null, 2.85, null, null, 77.73,
null);
- checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 147, 50.00, null, 0.85480237, 42.74, 2575.07, null, 2.80, null, null, 74.95,
+ checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 147, 50.00, null, 0.85480237, 42.74, 2575.07, null, 2.80, null, null, 74.93,
null);
- checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 148, 50.00, null, 0.85389057, 42.69, 2527.82, null, 2.75, null, null, 72.20,
+ checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 148, 50.00, null, 0.85389057, 42.69, 2527.82, null, 2.75, null, null, 72.18,
null);
- checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 149, 50.00, null, 0.85297975, 42.65, 2480.52, null, 2.70, null, null, 69.50,
+ checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 149, 50.00, null, 0.85297975, 42.65, 2480.52, null, 2.70, null, null, 69.48,
null);
- checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 150, 50.00, null, 0.85206990, 42.60, 2433.17, null, 2.65, null, null, 66.85,
+ checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 150, 50.00, null, 0.85206990, 42.60, 2433.17, null, 2.65, null, null, 66.83,
null);
- checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 151, 50.00, null, 0.85116101, 42.56, 2385.77, null, 2.60, null, null, 64.25,
+ checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 151, 50.00, null, 0.85116101, 42.56, 2385.77, null, 2.60, null, null, 64.23,
null);
- checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 152, 50.00, null, 0.85025310, 42.51, 2338.31, null, 2.55, null, null, 61.70,
+ checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 152, 50.00, null, 0.85025310, 42.51, 2338.31, null, 2.54, null, null, 61.69,
null);
- checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 153, 50.00, null, 0.84934616, 42.47, 2290.81, null, 2.50, null, null, 59.20,
+ checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 153, 50.00, null, 0.84934616, 42.47, 2290.81, null, 2.50, null, null, 59.19,
null);
- checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 154, 50.00, null, 0.84844018, 42.42, 2243.26, null, 2.45, null, null, 56.75,
+ checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 154, 50.00, null, 0.84844018, 42.42, 2243.26, null, 2.45, null, null, 56.74,
null);
- checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 155, 50.00, null, 0.84753517, 42.38, 2195.65, null, 2.40, null, null, 54.35,
+ checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 155, 50.00, null, 0.84753517, 42.38, 2195.65, null, 2.39, null, null, 54.35,
null);
- checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 156, 50.00, null, 0.84663113, 42.33, 2148.00, null, 2.34, null, null, 52.01,
+ checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 156, 50.00, null, 0.84663113, 42.33, 2148.00, null, 2.35, null, null, 52.00,
null);
- checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 157, 50.00, null, 0.84572805, 42.29, 2100.29, null, 2.29, null, null, 49.72,
+ checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 157, 50.00, null, 0.84572805, 42.29, 2100.29, null, 2.29, null, null, 49.71,
null);
- checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 158, 50.00, null, 0.84482593, 42.24, 2052.53, null, 2.24, null, null, 47.48,
+ checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 158, 50.00, null, 0.84482593, 42.24, 2052.53, null, 2.24, null, null, 47.47,
null);
- checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 159, 50.00, null, 0.84392477, 42.20, 2004.73, null, 2.19, null, null, 45.29,
+ checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 159, 50.00, null, 0.84392477, 42.20, 2004.73, null, 2.20, null, null, 45.27,
null);
- checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 160, 50.00, null, 0.84302458, 42.15, 1956.87, null, 2.14, null, null, 43.15,
+ checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 160, 50.00, null, 0.84302458, 42.15, 1956.87, null, 2.14, null, null, 43.13,
null);
- checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 161, 50.00, null, 0.84212535, 42.11, 1908.96, null, 2.09, null, null, 41.06,
+ checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 161, 50.00, null, 0.84212535, 42.11, 1908.96, null, 2.09, null, null, 41.04,
null);
- checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 162, 50.00, null, 0.84122707, 42.06, 1860.99, null, 2.04, null, null, 39.02,
+ checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 162, 50.00, null, 0.84122707, 42.06, 1860.99, null, 2.03, null, null, 39.01,
null);
- checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 163, 50.00, null, 0.84032975, 42.02, 1812.98, null, 1.99, null, null, 37.03,
+ checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 163, 50.00, null, 0.84032975, 42.02, 1812.98, null, 1.99, null, null, 37.02,
null);
- checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 164, 50.00, null, 0.83943340, 41.97, 1764.92, null, 1.94, null, null, 35.09,
+ checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 164, 50.00, null, 0.83943340, 41.97, 1764.92, null, 1.94, null, null, 35.08,
null);
- checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 165, 50.00, null, 0.83853799, 41.93, 1716.80, null, 1.88, null, null, 33.21,
+ checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 165, 50.00, null, 0.83853799, 41.93, 1716.80, null, 1.88, null, null, 33.20,
null);
- checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 166, 50.00, null, 0.83764354, 41.88, 1668.64, null, 1.83, null, null, 31.38,
+ checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 166, 50.00, null, 0.83764354, 41.88, 1668.64, null, 1.84, null, null, 31.36,
null);
- checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 167, 50.00, null, 0.83675005, 41.84, 1620.42, null, 1.78, null, null, 29.60,
+ checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 167, 50.00, null, 0.83675005, 41.84, 1620.42, null, 1.78, null, null, 29.58,
null);
- checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 168, 50.00, null, 0.83585751, 41.79, 1572.15, null, 1.73, null, null, 27.87,
+ checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 168, 50.00, null, 0.83585751, 41.79, 1572.15, null, 1.73, null, null, 27.85,
null);
- checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 169, 50.00, null, 0.83496592, 41.75, 1523.83, null, 1.68, null, null, 26.19,
+ checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 169, 50.00, null, 0.83496592, 41.75, 1523.83, null, 1.68, null, null, 26.17,
null);
- checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 170, 50.00, null, 0.83407528, 41.70, 1475.45, null, 1.63, null, null, 24.56,
+ checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 170, 50.00, null, 0.83407528, 41.70, 1475.45, null, 1.62, null, null, 24.55,
null);
- checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 171, 50.00, null, 0.83318560, 41.66, 1427.03, null, 1.58, null, null, 22.98,
+ checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 171, 50.00, null, 0.83318560, 41.66, 1427.03, null, 1.58, null, null, 22.97,
null);
- checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 172, 50.00, null, 0.83229686, 41.61, 1378.55, null, 1.52, null, null, 21.46,
+ checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 172, 50.00, null, 0.83229686, 41.61, 1378.55, null, 1.52, null, null, 21.45,
null);
- checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 173, 50.00, null, 0.83140907, 41.57, 1330.02, null, 1.47, null, null, 19.99,
+ checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 173, 50.00, null, 0.83140907, 41.57, 1330.02, null, 1.47, null, null, 19.98,
null);
- checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 174, 50.00, null, 0.83052222, 41.53, 1281.45, null, 1.42, null, null, 18.57,
+ checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 174, 50.00, null, 0.83052222, 41.53, 1281.45, null, 1.43, null, null, 18.55,
null);
- checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 175, 50.00, null, 0.82963633, 41.48, 1232.81, null, 1.37, null, null, 17.20,
+ checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 175, 50.00, null, 0.82963633, 41.48, 1232.81, null, 1.36, null, null, 17.19,
null);
- checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 176, 50.00, null, 0.82875137, 41.44, 1184.13, null, 1.32, null, null, 15.88,
+ checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 176, 50.00, null, 0.82875137, 41.44, 1184.13, null, 1.32, null, null, 15.87,
null);
- checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 177, 50.00, null, 0.82786736, 41.39, 1135.39, null, 1.26, null, null, 14.62,
+ checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 177, 50.00, null, 0.82786736, 41.39, 1135.39, null, 1.26, null, null, 14.61,
null);
- checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 178, 50.00, null, 0.82698430, 41.35, 1086.61, null, 1.21, null, null, 13.41,
+ checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 178, 50.00, null, 0.82698430, 41.35, 1086.61, null, 1.22, null, null, 13.39,
null);
- checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 179, 50.00, null, 0.82610217, 41.31, 1037.77, null, 1.16, null, null, 12.25,
+ checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 179, 50.00, null, 0.82610217, 41.31, 1037.77, null, 1.16, null, null, 12.23,
null);
- checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 180, 50.00, null, 0.82522099, 41.26, 988.88, null, 1.11, null, null, 11.14,
+ checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 180, 50.00, null, 0.82522099, 41.26, 988.88, null, 1.11, null, null, 11.12,
null);
- checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 181, 50.00, null, 0.82434075, 41.22, 939.93, null, 1.06, null, null, 10.08,
+ checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 181, 50.00, null, 0.82434075, 41.22, 939.93, null, 1.05, null, null, 10.07,
null);
- checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 182, 50.00, null, 0.82346144, 41.17, 890.93, null, 1.00, null, null, 9.08,
+ checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 182, 50.00, null, 0.82346144, 41.17, 890.93, null, 1.00, null, null, 9.07,
null);
- checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 183, 50.00, null, 0.82258308, 41.13, 841.89, null, 0.95, null, null, 8.13,
+ checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 183, 50.00, null, 0.82258308, 41.13, 841.89, null, 0.96, null, null, 8.11,
null);
- checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 184, 50.00, null, 0.82170565, 41.09, 792.79, null, 0.90, null, null, 7.23,
+ checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 184, 50.00, null, 0.82170565, 41.09, 792.79, null, 0.90, null, null, 7.21,
null);
- checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 185, 50.00, null, 0.82082916, 41.04, 743.63, null, 0.85, null, null, 6.38,
+ checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 185, 50.00, null, 0.82082916, 41.04, 743.63, null, 0.84, null, null, 6.37,
null);
- checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 186, 50.00, null, 0.81995360, 41.00, 694.43, null, 0.79, null, null, 5.59,
+ checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 186, 50.00, null, 0.81995360, 41.00, 694.43, null, 0.80, null, null, 5.57,
null);
- checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 187, 50.00, null, 0.81907897, 40.95, 645.17, null, 0.74, null, null, 4.85,
+ checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 187, 50.00, null, 0.81907897, 40.95, 645.17, null, 0.74, null, null, 4.83,
null);
- checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 188, 50.00, null, 0.81820528, 40.91, 595.86, null, 0.69, null, null, 4.16,
+ checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 188, 50.00, null, 0.81820528, 40.91, 595.86, null, 0.69, null, null, 4.14,
null);
- checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 189, 50.00, null, 0.81733252, 40.87, 546.49, null, 0.64, null, null, 3.52,
+ checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 189, 50.00, null, 0.81733252, 40.87, 546.49, null, 0.63, null, null, 3.51,
null);
- checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 190, 50.00, null, 0.81646069, 40.82, 497.08, null, 0.58, null, null, 2.94,
+ checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 190, 50.00, null, 0.81646069, 40.82, 497.08, null, 0.59, null, null, 2.92,
null);
- checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 191, 50.00, null, 0.81558979, 40.78, 447.61, null, 0.53, null, null, 2.41,
+ checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 191, 50.00, null, 0.81558979, 40.78, 447.61, null, 0.53, null, null, 2.39,
null);
- checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 192, 50.00, null, 0.81471983, 40.74, 398.08, null, 0.48, null, null, 1.93,
+ checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 192, 50.00, null, 0.81471983, 40.74, 398.08, null, 0.47, null, null, 1.92,
null);
- checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 193, 50.00, null, 0.81385078, 40.69, 348.51, null, 0.43, null, null, 1.50,
+ checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 193, 50.00, null, 0.81385078, 40.69, 348.51, null, 0.43, null, null, 1.49,
null);
- checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 194, 50.00, null, 0.81298267, 40.65, 298.88, null, 0.37, null, null, 1.13,
+ checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 194, 50.00, null, 0.81298267, 40.65, 298.88, null, 0.37, null, null, 1.12,
null);
- checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 195, 50.00, null, 0.81211548, 40.61, 249.20, null, 0.32, null, null, 0.81,
+ checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 195, 50.00, null, 0.81211548, 40.61, 249.20, null, 0.32, null, null, 0.80,
null);
- checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 196, 50.00, null, 0.81124922, 40.56, 199.47, null, 0.27, null, null, 0.54,
+ checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 196, 50.00, null, 0.81124922, 40.56, 199.47, null, 0.27, null, null, 0.53,
null);
- checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 197, 50.00, null, 0.81038388, 40.52, 149.68, null, 0.21, null, null, 0.33,
+ checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 197, 50.00, null, 0.81038388, 40.52, 149.68, null, 0.21, null, null, 0.32,
null);
- checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 198, 50.00, null, 0.80951946, 40.48, 99.84, null, 0.16, null, null, 0.17,
+ checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 198, 50.00, null, 0.80951946, 40.48, 99.84, null, 0.16, null, null, 0.16,
null);
- checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 199, 50.00, null, 0.80865597, 40.43, 49.95, null, 0.11, null, null, 0.06,
+ checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 199, 50.00, null, 0.80865597, 40.43, 49.95, null, 0.11, null, null, 0.05,
null);
- checkInst(model, 200, 200, LocalDate.of(2019, 7, 20), 200, 50.00, null, 0.80779339, 40.39, 0.00, null, 0.06, null, null, 0.00,
+ checkInst(model, 200, 200, LocalDate.of(2019, 7, 20), 200, 50.00, null, 0.80779339, 40.39, 0.00, null, 0.05, null, null, 0.00,
null);
}
@@ -569,388 +569,388 @@ void testOnTimePayment_term200_discountFee1000_netDisbursement9000_pay50_50() {
checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 4, 50.00, null, 0.99574012, 49.79, 8757.01, null, 9.39, null, null, 942.99, null);
checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 5, 50.00, null, 0.99467799, 49.73, 8716.36, null, 9.35, null, null, 933.64, null);
checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 6, 50.00, null, 0.99361699, 49.68, 8675.67, null, 9.31, null, null, 924.33, null);
- checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 7, 50.00, null, 0.99255712, 49.63, 8634.94, null, 9.26, null, null, 915.07, null);
- checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 8, 50.00, null, 0.99149839, 49.57, 8594.16, null, 9.22, null, null, 905.85,
+ checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 7, 50.00, null, 0.99255712, 49.63, 8634.94, null, 9.27, null, null, 915.06, null);
+ checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 8, 50.00, null, 0.99149839, 49.57, 8594.16, null, 9.22, null, null, 905.84,
null);
- checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 9, 50.00, null, 0.99044078, 49.52, 8553.33, null, 9.18, null, null, 896.67,
+ checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 9, 50.00, null, 0.99044078, 49.52, 8553.33, null, 9.17, null, null, 896.67,
null);
- checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 10, 50.00, null, 0.98938430, 49.47, 8512.47, null, 9.13, null, null, 887.54,
+ checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 10, 50.00, null, 0.98938430, 49.47, 8512.47, null, 9.14, null, null, 887.53,
null);
- checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 11, 50.00, null, 0.98832895, 49.42, 8471.56, null, 9.09, null, null, 878.45,
+ checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 11, 50.00, null, 0.98832895, 49.42, 8471.56, null, 9.09, null, null, 878.44,
null);
- checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 12, 50.00, null, 0.98727472, 49.36, 8430.60, null, 9.05, null, null, 869.40,
+ checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 12, 50.00, null, 0.98727472, 49.36, 8430.60, null, 9.04, null, null, 869.40,
null);
- checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 13, 50.00, null, 0.98622162, 49.31, 8389.61, null, 9.00, null, null, 860.40,
+ checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 13, 50.00, null, 0.98622162, 49.31, 8389.61, null, 9.01, null, null, 860.39,
null);
- checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 14, 50.00, null, 0.98516964, 49.26, 8348.56, null, 8.96, null, null, 851.44,
+ checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 14, 50.00, null, 0.98516964, 49.26, 8348.56, null, 8.95, null, null, 851.44,
null);
- checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 15, 50.00, null, 0.98411879, 49.21, 8307.48, null, 8.91, null, null, 842.53,
+ checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 15, 50.00, null, 0.98411879, 49.21, 8307.48, null, 8.92, null, null, 842.52,
null);
- checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 16, 50.00, null, 0.98306905, 49.15, 8266.35, null, 8.87, null, null, 833.66,
+ checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 16, 50.00, null, 0.98306905, 49.15, 8266.35, null, 8.87, null, null, 833.65,
null);
- checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 17, 50.00, null, 0.98202044, 49.10, 8225.18, null, 8.83, null, null, 824.83,
+ checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 17, 50.00, null, 0.98202044, 49.10, 8225.18, null, 8.83, null, null, 824.82,
null);
- checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 18, 50.00, null, 0.98097294, 49.05, 8183.96, null, 8.78, null, null, 816.05,
+ checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 18, 50.00, null, 0.98097294, 49.05, 8183.96, null, 8.78, null, null, 816.04,
null);
- checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 19, 50.00, null, 0.97992656, 49.00, 8142.70, null, 8.74, null, null, 807.31,
+ checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 19, 50.00, null, 0.97992656, 49.00, 8142.70, null, 8.74, null, null, 807.30,
null);
- checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 20, 50.00, null, 0.97888129, 48.94, 8101.39, null, 8.69, null, null, 798.62,
+ checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 20, 50.00, null, 0.97888129, 48.94, 8101.39, null, 8.69, null, null, 798.61,
null);
- checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 21, 50.00, null, 0.97783715, 48.89, 8060.04, null, 8.65, null, null, 789.97,
+ checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 21, 50.00, null, 0.97783715, 48.89, 8060.04, null, 8.65, null, null, 789.96,
null);
- checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 22, 50.00, null, 0.97679411, 48.84, 8018.65, null, 8.61, null, null, 781.36,
+ checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 22, 50.00, null, 0.97679411, 48.84, 8018.65, null, 8.61, null, null, 781.35,
null);
- checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 23, 50.00, null, 0.97575219, 48.79, 7977.21, null, 8.56, null, null, 772.80,
+ checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 23, 50.00, null, 0.97575219, 48.79, 7977.21, null, 8.56, null, null, 772.79,
null);
- checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 24, 50.00, null, 0.97471138, 48.74, 7935.73, null, 8.52, null, null, 764.28,
+ checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 24, 50.00, null, 0.97471138, 48.74, 7935.73, null, 8.52, null, null, 764.27,
null);
- checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 25, 50.00, null, 0.97367168, 48.68, 7894.21, null, 8.47, null, null, 755.81,
+ checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 25, 50.00, null, 0.97367168, 48.68, 7894.21, null, 8.48, null, null, 755.79,
null);
- checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 26, 50.00, null, 0.97263309, 48.63, 7852.63, null, 8.43, null, null, 747.38,
+ checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 26, 50.00, null, 0.97263309, 48.63, 7852.63, null, 8.42, null, null, 747.37,
null);
- checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 27, 50.00, null, 0.97159560, 48.58, 7811.02, null, 8.39, null, null, 738.99,
+ checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 27, 50.00, null, 0.97159560, 48.58, 7811.02, null, 8.39, null, null, 738.98,
null);
- checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 28, 50.00, null, 0.97055922, 48.53, 7769.36, null, 8.34, null, null, 730.65,
+ checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 28, 50.00, null, 0.97055922, 48.53, 7769.36, null, 8.34, null, null, 730.64,
null);
- checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 29, 50.00, null, 0.96952395, 48.48, 7727.66, null, 8.30, null, null, 722.35,
+ checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 29, 50.00, null, 0.96952395, 48.48, 7727.66, null, 8.30, null, null, 722.34,
null);
- checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 30, 50.00, null, 0.96848979, 48.42, 7685.91, null, 8.25, null, null, 714.10,
+ checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 30, 50.00, null, 0.96848979, 48.42, 7685.91, null, 8.25, null, null, 714.09,
null);
- checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 31, 50.00, null, 0.96745672, 48.37, 7644.12, null, 8.21, null, null, 705.89,
+ checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 31, 50.00, null, 0.96745672, 48.37, 7644.12, null, 8.21, null, null, 705.88,
null);
- checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 32, 50.00, null, 0.96642476, 48.32, 7602.28, null, 8.16, null, null, 697.73,
+ checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 32, 50.00, null, 0.96642476, 48.32, 7602.28, null, 8.16, null, null, 697.72,
null);
- checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 33, 50.00, null, 0.96539390, 48.27, 7560.40, null, 8.12, null, null, 689.61,
+ checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 33, 50.00, null, 0.96539390, 48.27, 7560.40, null, 8.12, null, null, 689.60,
null);
- checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 34, 50.00, null, 0.96436413, 48.22, 7518.47, null, 8.07, null, null, 681.54,
+ checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 34, 50.00, null, 0.96436413, 48.22, 7518.47, null, 8.07, null, null, 681.53,
null);
- checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 35, 50.00, null, 0.96333547, 48.17, 7476.50, null, 8.03, null, null, 673.51,
+ checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 35, 50.00, null, 0.96333547, 48.17, 7476.50, null, 8.03, null, null, 673.50,
null);
- checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 36, 50.00, null, 0.96230790, 48.12, 7434.48, null, 7.98, null, null, 665.53,
+ checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 36, 50.00, null, 0.96230790, 48.12, 7434.48, null, 7.98, null, null, 665.52,
null);
- checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 37, 50.00, null, 0.96128143, 48.06, 7392.42, null, 7.94, null, null, 657.59,
+ checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 37, 50.00, null, 0.96128143, 48.06, 7392.42, null, 7.94, null, null, 657.58,
null);
- checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 38, 50.00, null, 0.96025606, 48.01, 7350.31, null, 7.89, null, null, 649.70,
+ checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 38, 50.00, null, 0.96025606, 48.01, 7350.31, null, 7.89, null, null, 649.69,
null);
- checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 39, 50.00, null, 0.95923178, 47.96, 7308.16, null, 7.85, null, null, 641.85,
+ checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 39, 50.00, null, 0.95923178, 47.96, 7308.16, null, 7.85, null, null, 641.84,
null);
- checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 40, 50.00, null, 0.95820859, 47.91, 7265.97, null, 7.80, null, null, 634.05,
+ checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 40, 50.00, null, 0.95820859, 47.91, 7265.97, null, 7.81, null, null, 634.03,
null);
- checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 41, 50.00, null, 0.95718649, 47.86, 7223.72, null, 7.76, null, null, 626.29,
+ checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 41, 50.00, null, 0.95718649, 47.86, 7223.72, null, 7.75, null, null, 626.28,
null);
- checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 42, 50.00, null, 0.95616548, 47.81, 7181.44, null, 7.71, null, null, 618.58,
+ checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 42, 50.00, null, 0.95616548, 47.81, 7181.44, null, 7.72, null, null, 618.56,
null);
- checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 43, 50.00, null, 0.95514557, 47.76, 7139.11, null, 7.67, null, null, 610.91,
+ checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 43, 50.00, null, 0.95514557, 47.76, 7139.11, null, 7.67, null, null, 610.89,
null);
- checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 44, 50.00, null, 0.95412674, 47.71, 7096.73, null, 7.62, null, null, 603.29,
+ checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 44, 50.00, null, 0.95412674, 47.71, 7096.73, null, 7.62, null, null, 603.27,
null);
- checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 45, 50.00, null, 0.95310899, 47.66, 7054.31, null, 7.58, null, null, 595.71,
+ checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 45, 50.00, null, 0.95310899, 47.66, 7054.31, null, 7.58, null, null, 595.69,
null);
- checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 46, 50.00, null, 0.95209233, 47.60, 7011.84, null, 7.53, null, null, 588.18,
+ checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 46, 50.00, null, 0.95209233, 47.60, 7011.84, null, 7.53, null, null, 588.16,
null);
- checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 47, 50.00, null, 0.95107676, 47.55, 6969.33, null, 7.49, null, null, 580.69,
+ checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 47, 50.00, null, 0.95107676, 47.55, 6969.33, null, 7.49, null, null, 580.67,
null);
- checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 48, 50.00, null, 0.95006227, 47.50, 6926.77, null, 7.44, null, null, 573.25,
+ checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 48, 50.00, null, 0.95006227, 47.50, 6926.77, null, 7.44, null, null, 573.23,
null);
- checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 49, 50.00, null, 0.94904886, 47.45, 6884.17, null, 7.40, null, null, 565.85,
+ checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 49, 50.00, null, 0.94904886, 47.45, 6884.17, null, 7.40, null, null, 565.83,
null);
- checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 50, 50.00, null, 0.94803653, 47.40, 6841.52, null, 7.35, null, null, 558.50,
+ checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 50, 50.00, null, 0.94803653, 47.40, 6841.52, null, 7.35, null, null, 558.48,
null);
- checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 51, 50.00, null, 0.94702529, 47.35, 6798.82, null, 7.31, null, null, 551.19,
+ checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 51, 50.00, null, 0.94702529, 47.35, 6798.82, null, 7.30, null, null, 551.18,
null);
- checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 52, 50.00, null, 0.94601512, 47.30, 6756.08, null, 7.26, null, null, 543.93,
+ checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 52, 50.00, null, 0.94601512, 47.30, 6756.08, null, 7.26, null, null, 543.92,
null);
- checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 53, 50.00, null, 0.94500603, 47.25, 6713.30, null, 7.21, null, null, 536.72,
+ checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 53, 50.00, null, 0.94500603, 47.25, 6713.30, null, 7.22, null, null, 536.70,
null);
- checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 54, 50.00, null, 0.94399801, 47.20, 6670.47, null, 7.17, null, null, 529.55,
+ checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 54, 50.00, null, 0.94399801, 47.20, 6670.47, null, 7.17, null, null, 529.53,
null);
- checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 55, 50.00, null, 0.94299107, 47.15, 6627.59, null, 7.12, null, null, 522.43,
+ checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 55, 50.00, null, 0.94299107, 47.15, 6627.59, null, 7.12, null, null, 522.41,
null);
- checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 56, 50.00, null, 0.94198521, 47.10, 6584.67, null, 7.08, null, null, 515.35,
+ checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 56, 50.00, null, 0.94198521, 47.10, 6584.67, null, 7.08, null, null, 515.33,
null);
- checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 57, 50.00, null, 0.94098042, 47.05, 6541.70, null, 7.03, null, null, 508.32,
+ checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 57, 50.00, null, 0.94098042, 47.05, 6541.70, null, 7.03, null, null, 508.30,
null);
- checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 58, 50.00, null, 0.93997669, 47.00, 6498.68, null, 6.99, null, null, 501.33,
+ checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 58, 50.00, null, 0.93997669, 47.00, 6498.68, null, 6.98, null, null, 501.32,
null);
- checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 59, 50.00, null, 0.93897404, 46.95, 6455.62, null, 6.94, null, null, 494.39,
+ checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 59, 50.00, null, 0.93897404, 46.95, 6455.62, null, 6.94, null, null, 494.38,
null);
- checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 60, 50.00, null, 0.93797246, 46.90, 6412.51, null, 6.89, null, null, 487.50,
+ checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 60, 50.00, null, 0.93797246, 46.90, 6412.51, null, 6.89, null, null, 487.49,
null);
- checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 61, 50.00, null, 0.93697195, 46.85, 6369.36, null, 6.85, null, null, 480.65,
+ checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 61, 50.00, null, 0.93697195, 46.85, 6369.36, null, 6.85, null, null, 480.64,
null);
- checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 62, 50.00, null, 0.93597251, 46.80, 6326.16, null, 6.80, null, null, 473.85,
+ checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 62, 50.00, null, 0.93597251, 46.80, 6326.16, null, 6.80, null, null, 473.84,
null);
- checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 63, 50.00, null, 0.93497413, 46.75, 6282.92, null, 6.76, null, null, 467.09,
+ checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 63, 50.00, null, 0.93497413, 46.75, 6282.92, null, 6.76, null, null, 467.08,
null);
- checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 64, 50.00, null, 0.93397681, 46.70, 6239.63, null, 6.71, null, null, 460.38,
+ checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 64, 50.00, null, 0.93397681, 46.70, 6239.63, null, 6.71, null, null, 460.37,
null);
- checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 65, 50.00, null, 0.93298056, 46.65, 6196.29, null, 6.66, null, null, 453.72,
+ checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 65, 50.00, null, 0.93298056, 46.65, 6196.29, null, 6.66, null, null, 453.71,
null);
- checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 66, 50.00, null, 0.93198538, 46.60, 6152.91, null, 6.62, null, null, 447.10,
+ checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 66, 50.00, null, 0.93198538, 46.60, 6152.91, null, 6.62, null, null, 447.09,
null);
- checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 67, 50.00, null, 0.93099125, 46.55, 6109.48, null, 6.57, null, null, 440.53,
+ checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 67, 50.00, null, 0.93099125, 46.55, 6109.48, null, 6.57, null, null, 440.52,
null);
- checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 68, 50.00, null, 0.92999818, 46.50, 6066.00, null, 6.52, null, null, 434.01,
+ checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 68, 50.00, null, 0.92999818, 46.50, 6066.00, null, 6.52, null, null, 434.00,
null);
- checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 69, 50.00, null, 0.92900618, 46.45, 6022.48, null, 6.48, null, null, 427.53,
+ checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 69, 50.00, null, 0.92900618, 46.45, 6022.48, null, 6.48, null, null, 427.52,
null);
- checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 70, 50.00, null, 0.92801523, 46.40, 5978.91, null, 6.43, null, null, 421.10,
+ checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 70, 50.00, null, 0.92801523, 46.40, 5978.91, null, 6.43, null, null, 421.09,
null);
- checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 71, 50.00, null, 0.92702534, 46.35, 5935.29, null, 6.38, null, null, 414.72,
+ checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 71, 50.00, null, 0.92702534, 46.35, 5935.29, null, 6.38, null, null, 414.71,
null);
- checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 72, 50.00, null, 0.92603650, 46.30, 5891.63, null, 6.34, null, null, 408.38,
+ checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 72, 50.00, null, 0.92603650, 46.30, 5891.63, null, 6.34, null, null, 408.37,
null);
- checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 73, 50.00, null, 0.92504872, 46.25, 5847.92, null, 6.29, null, null, 402.09,
+ checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 73, 50.00, null, 0.92504872, 46.25, 5847.92, null, 6.29, null, null, 402.08,
null);
- checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 74, 50.00, null, 0.92406200, 46.20, 5804.17, null, 6.24, null, null, 395.85,
+ checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 74, 50.00, null, 0.92406200, 46.20, 5804.17, null, 6.25, null, null, 395.83,
null);
- checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 75, 50.00, null, 0.92307632, 46.15, 5760.36, null, 6.20, null, null, 389.65,
+ checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 75, 50.00, null, 0.92307632, 46.15, 5760.36, null, 6.19, null, null, 389.64,
null);
- checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 76, 50.00, null, 0.92209170, 46.10, 5716.52, null, 6.15, null, null, 383.50,
+ checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 76, 50.00, null, 0.92209170, 46.10, 5716.52, null, 6.16, null, null, 383.48,
null);
- checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 77, 50.00, null, 0.92110813, 46.06, 5672.62, null, 6.10, null, null, 377.40,
+ checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 77, 50.00, null, 0.92110813, 46.06, 5672.62, null, 6.10, null, null, 377.38,
null);
- checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 78, 50.00, null, 0.92012560, 46.01, 5628.68, null, 6.06, null, null, 371.34,
+ checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 78, 50.00, null, 0.92012560, 46.01, 5628.68, null, 6.06, null, null, 371.32,
null);
- checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 79, 50.00, null, 0.91914413, 45.96, 5584.69, null, 6.01, null, null, 365.33,
+ checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 79, 50.00, null, 0.91914413, 45.96, 5584.69, null, 6.01, null, null, 365.31,
null);
- checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 80, 50.00, null, 0.91816370, 45.91, 5540.65, null, 5.96, null, null, 359.37,
+ checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 80, 50.00, null, 0.91816370, 45.91, 5540.65, null, 5.96, null, null, 359.35,
null);
- checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 81, 50.00, null, 0.91718432, 45.86, 5496.57, null, 5.92, null, null, 353.45,
+ checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 81, 50.00, null, 0.91718432, 45.86, 5496.57, null, 5.92, null, null, 353.43,
null);
- checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 82, 50.00, null, 0.91620598, 45.81, 5452.44, null, 5.87, null, null, 347.58,
+ checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 82, 50.00, null, 0.91620598, 45.81, 5452.44, null, 5.87, null, null, 347.56,
null);
- checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 83, 50.00, null, 0.91522868, 45.76, 5408.26, null, 5.82, null, null, 341.76,
+ checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 83, 50.00, null, 0.91522868, 45.76, 5408.26, null, 5.82, null, null, 341.74,
null);
- checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 84, 50.00, null, 0.91425243, 45.71, 5364.03, null, 5.78, null, null, 335.98,
+ checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 84, 50.00, null, 0.91425243, 45.71, 5364.03, null, 5.77, null, null, 335.97,
null);
- checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 85, 50.00, null, 0.91327722, 45.66, 5319.76, null, 5.73, null, null, 330.25,
+ checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 85, 50.00, null, 0.91327722, 45.66, 5319.76, null, 5.73, null, null, 330.24,
null);
- checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 86, 50.00, null, 0.91230305, 45.62, 5275.44, null, 5.68, null, null, 324.57,
+ checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 86, 50.00, null, 0.91230305, 45.62, 5275.44, null, 5.68, null, null, 324.56,
null);
- checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 87, 50.00, null, 0.91132992, 45.57, 5231.08, null, 5.63, null, null, 318.94,
+ checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 87, 50.00, null, 0.91132992, 45.57, 5231.08, null, 5.64, null, null, 318.92,
null);
- checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 88, 50.00, null, 0.91035783, 45.52, 5186.66, null, 5.59, null, null, 313.35,
+ checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 88, 50.00, null, 0.91035783, 45.52, 5186.66, null, 5.58, null, null, 313.34,
null);
- checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 89, 50.00, null, 0.90938677, 45.47, 5142.20, null, 5.54, null, null, 307.81,
+ checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 89, 50.00, null, 0.90938677, 45.47, 5142.20, null, 5.54, null, null, 307.80,
null);
- checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 90, 50.00, null, 0.90841675, 45.42, 5097.69, null, 5.49, null, null, 302.32,
+ checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 90, 50.00, null, 0.90841675, 45.42, 5097.69, null, 5.49, null, null, 302.31,
null);
- checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 91, 50.00, null, 0.90744776, 45.37, 5053.13, null, 5.44, null, null, 296.88,
+ checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 91, 50.00, null, 0.90744776, 45.37, 5053.13, null, 5.44, null, null, 296.87,
null);
- checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 92, 50.00, null, 0.90647981, 45.32, 5008.53, null, 5.40, null, null, 291.48,
+ checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 92, 50.00, null, 0.90647981, 45.32, 5008.53, null, 5.40, null, null, 291.47,
null);
- checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 93, 50.00, null, 0.90551289, 45.28, 4963.88, null, 5.35, null, null, 286.13,
+ checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 93, 50.00, null, 0.90551289, 45.28, 4963.88, null, 5.35, null, null, 286.12,
null);
- checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 94, 50.00, null, 0.90454700, 45.23, 4919.18, null, 5.30, null, null, 280.83,
+ checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 94, 50.00, null, 0.90454700, 45.23, 4919.18, null, 5.30, null, null, 280.82,
null);
- checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 95, 50.00, null, 0.90358215, 45.18, 4874.43, null, 5.25, null, null, 275.58,
+ checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 95, 50.00, null, 0.90358215, 45.18, 4874.43, null, 5.25, null, null, 275.57,
null);
- checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 96, 50.00, null, 0.90261832, 45.13, 4829.64, null, 5.20, null, null, 270.38,
+ checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 96, 50.00, null, 0.90261832, 45.13, 4829.64, null, 5.21, null, null, 270.36,
null);
- checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 97, 50.00, null, 0.90165552, 45.08, 4784.79, null, 5.16, null, null, 265.22,
+ checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 97, 50.00, null, 0.90165552, 45.08, 4784.79, null, 5.15, null, null, 265.21,
null);
- checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 98, 50.00, null, 0.90069374, 45.03, 4739.90, null, 5.11, null, null, 260.11,
+ checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 98, 50.00, null, 0.90069374, 45.03, 4739.90, null, 5.11, null, null, 260.10,
null);
- checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 99, 50.00, null, 0.89973299, 44.99, 4694.96, null, 5.06, null, null, 255.05,
+ checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 99, 50.00, null, 0.89973299, 44.99, 4694.96, null, 5.06, null, null, 255.04,
null);
- checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 100, 50.00, null, 0.89877327, 44.94, 4649.98, null, 5.01, null, null, 250.04,
+ checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 100, 50.00, null, 0.89877327, 44.94, 4649.98, null, 5.02, null, null, 250.02,
null);
- checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 101, 50.00, null, 0.89781457, 44.89, 4604.94, null, 4.97, null, null, 245.07,
+ checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 101, 50.00, null, 0.89781457, 44.89, 4604.94, null, 4.96, null, null, 245.06,
null);
- checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 102, 50.00, null, 0.89685689, 44.84, 4559.86, null, 4.92, null, null, 240.15,
+ checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 102, 50.00, null, 0.89685689, 44.84, 4559.86, null, 4.92, null, null, 240.14,
null);
- checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 103, 50.00, null, 0.89590024, 44.80, 4514.73, null, 4.87, null, null, 235.28,
+ checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 103, 50.00, null, 0.89590024, 44.80, 4514.73, null, 4.87, null, null, 235.27,
null);
- checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 104, 50.00, null, 0.89494460, 44.75, 4469.55, null, 4.82, null, null, 230.46,
+ checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 104, 50.00, null, 0.89494460, 44.75, 4469.55, null, 4.82, null, null, 230.45,
null);
- checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 105, 50.00, null, 0.89398999, 44.70, 4424.32, null, 4.77, null, null, 225.69,
+ checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 105, 50.00, null, 0.89398999, 44.70, 4424.32, null, 4.77, null, null, 225.68,
null);
- checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 106, 50.00, null, 0.89303639, 44.65, 4379.05, null, 4.72, null, null, 220.97,
+ checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 106, 50.00, null, 0.89303639, 44.65, 4379.05, null, 4.73, null, null, 220.95,
null);
- checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 107, 50.00, null, 0.89208381, 44.60, 4333.72, null, 4.68, null, null, 216.29,
+ checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 107, 50.00, null, 0.89208381, 44.60, 4333.72, null, 4.67, null, null, 216.28,
null);
- checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 108, 50.00, null, 0.89113225, 44.56, 4288.35, null, 4.63, null, null, 211.66,
+ checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 108, 50.00, null, 0.89113225, 44.56, 4288.35, null, 4.63, null, null, 211.65,
null);
- checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 109, 50.00, null, 0.89018170, 44.51, 4242.93, null, 4.58, null, null, 207.08,
+ checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 109, 50.00, null, 0.89018170, 44.51, 4242.93, null, 4.58, null, null, 207.07,
null);
- checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 110, 50.00, null, 0.88923216, 44.46, 4197.46, null, 4.53, null, null, 202.55,
+ checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 110, 50.00, null, 0.88923216, 44.46, 4197.46, null, 4.53, null, null, 202.54,
null);
- checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 111, 50.00, null, 0.88828364, 44.41, 4151.94, null, 4.48, null, null, 198.07,
+ checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 111, 50.00, null, 0.88828364, 44.41, 4151.94, null, 4.48, null, null, 198.06,
null);
- checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 112, 50.00, null, 0.88733613, 44.37, 4106.38, null, 4.43, null, null, 193.64,
+ checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 112, 50.00, null, 0.88733613, 44.37, 4106.38, null, 4.44, null, null, 193.62,
null);
- checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 113, 50.00, null, 0.88638963, 44.32, 4060.76, null, 4.38, null, null, 189.26,
+ checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 113, 50.00, null, 0.88638963, 44.32, 4060.76, null, 4.38, null, null, 189.24,
null);
- checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 114, 50.00, null, 0.88544414, 44.27, 4015.10, null, 4.34, null, null, 184.92,
+ checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 114, 50.00, null, 0.88544414, 44.27, 4015.10, null, 4.34, null, null, 184.90,
null);
- checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 115, 50.00, null, 0.88449966, 44.22, 3969.38, null, 4.29, null, null, 180.63,
+ checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 115, 50.00, null, 0.88449966, 44.22, 3969.38, null, 4.28, null, null, 180.62,
null);
- checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 116, 50.00, null, 0.88355619, 44.18, 3923.62, null, 4.24, null, null, 176.39,
+ checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 116, 50.00, null, 0.88355619, 44.18, 3923.62, null, 4.24, null, null, 176.38,
null);
- checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 117, 50.00, null, 0.88261372, 44.13, 3877.81, null, 4.19, null, null, 172.20,
+ checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 117, 50.00, null, 0.88261372, 44.13, 3877.81, null, 4.19, null, null, 172.19,
null);
- checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 118, 50.00, null, 0.88167226, 44.08, 3831.95, null, 4.14, null, null, 168.06,
+ checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 118, 50.00, null, 0.88167226, 44.08, 3831.95, null, 4.14, null, null, 168.05,
null);
- checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 119, 50.00, null, 0.88073180, 44.04, 3786.04, null, 4.09, null, null, 163.97,
+ checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 119, 50.00, null, 0.88073180, 44.04, 3786.04, null, 4.09, null, null, 163.96,
null);
- checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 120, 50.00, null, 0.87979234, 43.99, 3740.09, null, 4.04, null, null, 159.93,
+ checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 120, 50.00, null, 0.87979234, 43.99, 3740.09, null, 4.05, null, null, 159.91,
null);
- checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 121, 50.00, null, 0.87885389, 43.94, 3694.08, null, 3.99, null, null, 155.94,
+ checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 121, 50.00, null, 0.87885389, 43.94, 3694.08, null, 3.99, null, null, 155.92,
null);
- checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 122, 50.00, null, 0.87791644, 43.90, 3648.03, null, 3.94, null, null, 152.00,
+ checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 122, 50.00, null, 0.87791644, 43.90, 3648.03, null, 3.95, null, null, 151.97,
null);
- checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 123, 50.00, null, 0.87697999, 43.85, 3601.92, null, 3.90, null, null, 148.10,
+ checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 123, 50.00, null, 0.87697999, 43.85, 3601.92, null, 3.89, null, null, 148.08,
null);
- checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 124, 50.00, null, 0.87604453, 43.80, 3555.77, null, 3.85, null, null, 144.25,
+ checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 124, 50.00, null, 0.87604453, 43.80, 3555.77, null, 3.85, null, null, 144.23,
null);
- checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 125, 50.00, null, 0.87511008, 43.76, 3509.56, null, 3.80, null, null, 140.45,
+ checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 125, 50.00, null, 0.87511008, 43.76, 3509.56, null, 3.79, null, null, 140.44,
null);
- checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 126, 50.00, null, 0.87417662, 43.71, 3463.31, null, 3.75, null, null, 136.70,
+ checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 126, 50.00, null, 0.87417662, 43.71, 3463.31, null, 3.75, null, null, 136.69,
null);
- checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 127, 50.00, null, 0.87324416, 43.66, 3417.01, null, 3.70, null, null, 133.00,
+ checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 127, 50.00, null, 0.87324416, 43.66, 3417.01, null, 3.70, null, null, 132.99,
null);
- checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 128, 50.00, null, 0.87231269, 43.62, 3370.66, null, 3.65, null, null, 129.35,
+ checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 128, 50.00, null, 0.87231269, 43.62, 3370.66, null, 3.65, null, null, 129.34,
null);
- checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 129, 50.00, null, 0.87138221, 43.57, 3324.26, null, 3.60, null, null, 125.75,
+ checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 129, 50.00, null, 0.87138221, 43.57, 3324.26, null, 3.60, null, null, 125.74,
null);
- checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 130, 50.00, null, 0.87045273, 43.52, 3277.81, null, 3.55, null, null, 122.20,
+ checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 130, 50.00, null, 0.87045273, 43.52, 3277.81, null, 3.55, null, null, 122.19,
null);
- checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 131, 50.00, null, 0.86952424, 43.48, 3231.31, null, 3.50, null, null, 118.70,
+ checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 131, 50.00, null, 0.86952424, 43.48, 3231.31, null, 3.50, null, null, 118.69,
null);
- checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 132, 50.00, null, 0.86859674, 43.43, 3184.76, null, 3.45, null, null, 115.25,
+ checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 132, 50.00, null, 0.86859674, 43.43, 3184.76, null, 3.45, null, null, 115.24,
null);
- checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 133, 50.00, null, 0.86767023, 43.38, 3138.16, null, 3.40, null, null, 111.85,
+ checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 133, 50.00, null, 0.86767023, 43.38, 3138.16, null, 3.40, null, null, 111.84,
null);
- checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 134, 50.00, null, 0.86674471, 43.34, 3091.51, null, 3.35, null, null, 108.50,
+ checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 134, 50.00, null, 0.86674471, 43.34, 3091.51, null, 3.35, null, null, 108.49,
null);
- checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 135, 50.00, null, 0.86582017, 43.29, 3044.81, null, 3.30, null, null, 105.20,
+ checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 135, 50.00, null, 0.86582017, 43.29, 3044.81, null, 3.30, null, null, 105.19,
null);
- checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 136, 50.00, null, 0.86489662, 43.24, 2998.06, null, 3.25, null, null, 101.95,
+ checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 136, 50.00, null, 0.86489662, 43.24, 2998.06, null, 3.25, null, null, 101.94,
null);
- checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 137, 50.00, null, 0.86397406, 43.20, 2951.26, null, 3.20, null, null, 98.75,
+ checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 137, 50.00, null, 0.86397406, 43.20, 2951.26, null, 3.20, null, null, 98.74,
null);
- checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 138, 50.00, null, 0.86305248, 43.15, 2904.42, null, 3.15, null, null, 95.60,
+ checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 138, 50.00, null, 0.86305248, 43.15, 2904.42, null, 3.16, null, null, 95.58,
null);
- checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 139, 50.00, null, 0.86213188, 43.11, 2857.52, null, 3.10, null, null, 92.50,
+ checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 139, 50.00, null, 0.86213188, 43.11, 2857.52, null, 3.10, null, null, 92.48,
null);
- checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 140, 50.00, null, 0.86121227, 43.06, 2810.57, null, 3.05, null, null, 89.45,
+ checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 140, 50.00, null, 0.86121227, 43.06, 2810.57, null, 3.05, null, null, 89.43,
null);
- checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 141, 50.00, null, 0.86029363, 43.01, 2763.57, null, 3.00, null, null, 86.45,
+ checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 141, 50.00, null, 0.86029363, 43.01, 2763.57, null, 3.00, null, null, 86.43,
null);
- checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 142, 50.00, null, 0.85937598, 42.97, 2716.52, null, 2.95, null, null, 83.50,
+ checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 142, 50.00, null, 0.85937598, 42.97, 2716.52, null, 2.95, null, null, 83.48,
null);
- checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 143, 50.00, null, 0.85845930, 42.92, 2669.42, null, 2.90, null, null, 80.60,
+ checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 143, 50.00, null, 0.85845930, 42.92, 2669.42, null, 2.90, null, null, 80.58,
null);
- checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 144, 50.00, null, 0.85754361, 42.88, 2622.27, null, 2.85, null, null, 77.75,
+ checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 144, 50.00, null, 0.85754361, 42.88, 2622.27, null, 2.85, null, null, 77.73,
null);
- checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 145, 50.00, null, 0.85662889, 42.83, 2575.07, null, 2.80, null, null, 74.95,
+ checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 145, 50.00, null, 0.85662889, 42.83, 2575.07, null, 2.80, null, null, 74.93,
null);
- checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 146, 50.00, null, 0.85571514, 42.79, 2527.82, null, 2.75, null, null, 72.20,
+ checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 146, 50.00, null, 0.85571514, 42.79, 2527.82, null, 2.75, null, null, 72.18,
null);
- checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 147, 50.00, null, 0.85480237, 42.74, 2480.52, null, 2.70, null, null, 69.50,
+ checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 147, 50.00, null, 0.85480237, 42.74, 2480.52, null, 2.70, null, null, 69.48,
null);
- checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 148, 50.00, null, 0.85389057, 42.69, 2433.17, null, 2.65, null, null, 66.85,
+ checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 148, 50.00, null, 0.85389057, 42.69, 2433.17, null, 2.65, null, null, 66.83,
null);
- checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 149, 50.00, null, 0.85297975, 42.65, 2385.77, null, 2.60, null, null, 64.25,
+ checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 149, 50.00, null, 0.85297975, 42.65, 2385.77, null, 2.60, null, null, 64.23,
null);
- checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 150, 50.00, null, 0.85206990, 42.60, 2338.31, null, 2.55, null, null, 61.70,
+ checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 150, 50.00, null, 0.85206990, 42.60, 2338.31, null, 2.54, null, null, 61.69,
null);
- checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 151, 50.00, null, 0.85116101, 42.56, 2290.81, null, 2.50, null, null, 59.20,
+ checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 151, 50.00, null, 0.85116101, 42.56, 2290.81, null, 2.50, null, null, 59.19,
null);
- checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 152, 50.00, null, 0.85025310, 42.51, 2243.26, null, 2.45, null, null, 56.75,
+ checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 152, 50.00, null, 0.85025310, 42.51, 2243.26, null, 2.45, null, null, 56.74,
null);
- checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 153, 50.00, null, 0.84934616, 42.47, 2195.65, null, 2.40, null, null, 54.35,
+ checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 153, 50.00, null, 0.84934616, 42.47, 2195.65, null, 2.39, null, null, 54.35,
null);
- checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 154, 50.00, null, 0.84844018, 42.42, 2148.00, null, 2.34, null, null, 52.01,
+ checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 154, 50.00, null, 0.84844018, 42.42, 2148.00, null, 2.35, null, null, 52.00,
null);
- checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 155, 50.00, null, 0.84753517, 42.38, 2100.29, null, 2.29, null, null, 49.72,
+ checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 155, 50.00, null, 0.84753517, 42.38, 2100.29, null, 2.29, null, null, 49.71,
null);
- checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 156, 50.00, null, 0.84663113, 42.33, 2052.53, null, 2.24, null, null, 47.48,
+ checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 156, 50.00, null, 0.84663113, 42.33, 2052.53, null, 2.24, null, null, 47.47,
null);
- checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 157, 50.00, null, 0.84572805, 42.29, 2004.73, null, 2.19, null, null, 45.29,
+ checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 157, 50.00, null, 0.84572805, 42.29, 2004.73, null, 2.20, null, null, 45.27,
null);
- checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 158, 50.00, null, 0.84482593, 42.24, 1956.87, null, 2.14, null, null, 43.15,
+ checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 158, 50.00, null, 0.84482593, 42.24, 1956.87, null, 2.14, null, null, 43.13,
null);
- checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 159, 50.00, null, 0.84392477, 42.20, 1908.96, null, 2.09, null, null, 41.06,
+ checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 159, 50.00, null, 0.84392477, 42.20, 1908.96, null, 2.09, null, null, 41.04,
null);
- checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 160, 50.00, null, 0.84302458, 42.15, 1860.99, null, 2.04, null, null, 39.02,
+ checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 160, 50.00, null, 0.84302458, 42.15, 1860.99, null, 2.03, null, null, 39.01,
null);
- checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 161, 50.00, null, 0.84212535, 42.11, 1812.98, null, 1.99, null, null, 37.03,
+ checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 161, 50.00, null, 0.84212535, 42.11, 1812.98, null, 1.99, null, null, 37.02,
null);
- checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 162, 50.00, null, 0.84122707, 42.06, 1764.92, null, 1.94, null, null, 35.09,
+ checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 162, 50.00, null, 0.84122707, 42.06, 1764.92, null, 1.94, null, null, 35.08,
null);
- checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 163, 50.00, null, 0.84032975, 42.02, 1716.80, null, 1.88, null, null, 33.21,
+ checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 163, 50.00, null, 0.84032975, 42.02, 1716.80, null, 1.88, null, null, 33.20,
null);
- checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 164, 50.00, null, 0.83943340, 41.97, 1668.64, null, 1.83, null, null, 31.38,
+ checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 164, 50.00, null, 0.83943340, 41.97, 1668.64, null, 1.84, null, null, 31.36,
null);
- checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 165, 50.00, null, 0.83853799, 41.93, 1620.42, null, 1.78, null, null, 29.60,
+ checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 165, 50.00, null, 0.83853799, 41.93, 1620.42, null, 1.78, null, null, 29.58,
null);
- checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 166, 50.00, null, 0.83764354, 41.88, 1572.15, null, 1.73, null, null, 27.87,
+ checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 166, 50.00, null, 0.83764354, 41.88, 1572.15, null, 1.73, null, null, 27.85,
null);
- checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 167, 50.00, null, 0.83675005, 41.84, 1523.83, null, 1.68, null, null, 26.19,
+ checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 167, 50.00, null, 0.83675005, 41.84, 1523.83, null, 1.68, null, null, 26.17,
null);
- checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 168, 50.00, null, 0.83585751, 41.79, 1475.45, null, 1.63, null, null, 24.56,
+ checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 168, 50.00, null, 0.83585751, 41.79, 1475.45, null, 1.62, null, null, 24.55,
null);
- checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 169, 50.00, null, 0.83496592, 41.75, 1427.03, null, 1.58, null, null, 22.98,
+ checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 169, 50.00, null, 0.83496592, 41.75, 1427.03, null, 1.58, null, null, 22.97,
null);
- checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 170, 50.00, null, 0.83407528, 41.70, 1378.55, null, 1.52, null, null, 21.46,
+ checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 170, 50.00, null, 0.83407528, 41.70, 1378.55, null, 1.52, null, null, 21.45,
null);
- checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 171, 50.00, null, 0.83318560, 41.66, 1330.02, null, 1.47, null, null, 19.99,
+ checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 171, 50.00, null, 0.83318560, 41.66, 1330.02, null, 1.47, null, null, 19.98,
null);
- checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 172, 50.00, null, 0.83229686, 41.61, 1281.45, null, 1.42, null, null, 18.57,
+ checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 172, 50.00, null, 0.83229686, 41.61, 1281.45, null, 1.43, null, null, 18.55,
null);
- checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 173, 50.00, null, 0.83140907, 41.57, 1232.81, null, 1.37, null, null, 17.20,
+ checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 173, 50.00, null, 0.83140907, 41.57, 1232.81, null, 1.36, null, null, 17.19,
null);
- checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 174, 50.00, null, 0.83052222, 41.53, 1184.13, null, 1.32, null, null, 15.88,
+ checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 174, 50.00, null, 0.83052222, 41.53, 1184.13, null, 1.32, null, null, 15.87,
null);
- checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 175, 50.00, null, 0.82963633, 41.48, 1135.39, null, 1.26, null, null, 14.62,
+ checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 175, 50.00, null, 0.82963633, 41.48, 1135.39, null, 1.26, null, null, 14.61,
null);
- checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 176, 50.00, null, 0.82875137, 41.44, 1086.61, null, 1.21, null, null, 13.41,
+ checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 176, 50.00, null, 0.82875137, 41.44, 1086.61, null, 1.22, null, null, 13.39,
null);
- checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 177, 50.00, null, 0.82786736, 41.39, 1037.77, null, 1.16, null, null, 12.25,
+ checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 177, 50.00, null, 0.82786736, 41.39, 1037.77, null, 1.16, null, null, 12.23,
null);
- checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 178, 50.00, null, 0.82698430, 41.35, 988.88, null, 1.11, null, null, 11.14,
+ checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 178, 50.00, null, 0.82698430, 41.35, 988.88, null, 1.11, null, null, 11.12,
null);
- checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 179, 50.00, null, 0.82610217, 41.31, 939.93, null, 1.06, null, null, 10.08,
+ checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 179, 50.00, null, 0.82610217, 41.31, 939.93, null, 1.05, null, null, 10.07,
null);
- checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 180, 50.00, null, 0.82522099, 41.26, 890.93, null, 1.00, null, null, 9.08,
+ checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 180, 50.00, null, 0.82522099, 41.26, 890.93, null, 1.00, null, null, 9.07,
null);
- checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 181, 50.00, null, 0.82434075, 41.22, 841.89, null, 0.95, null, null, 8.13,
+ checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 181, 50.00, null, 0.82434075, 41.22, 841.89, null, 0.96, null, null, 8.11,
null);
- checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 182, 50.00, null, 0.82346144, 41.17, 792.79, null, 0.90, null, null, 7.23,
+ checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 182, 50.00, null, 0.82346144, 41.17, 792.79, null, 0.90, null, null, 7.21,
null);
- checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 183, 50.00, null, 0.82258308, 41.13, 743.63, null, 0.85, null, null, 6.38,
+ checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 183, 50.00, null, 0.82258308, 41.13, 743.63, null, 0.84, null, null, 6.37,
null);
- checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 184, 50.00, null, 0.82170565, 41.09, 694.43, null, 0.79, null, null, 5.59,
+ checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 184, 50.00, null, 0.82170565, 41.09, 694.43, null, 0.80, null, null, 5.57,
null);
- checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 185, 50.00, null, 0.82082916, 41.04, 645.17, null, 0.74, null, null, 4.85,
+ checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 185, 50.00, null, 0.82082916, 41.04, 645.17, null, 0.74, null, null, 4.83,
null);
- checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 186, 50.00, null, 0.81995360, 41.00, 595.86, null, 0.69, null, null, 4.16,
+ checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 186, 50.00, null, 0.81995360, 41.00, 595.86, null, 0.69, null, null, 4.14,
null);
- checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 187, 50.00, null, 0.81907897, 40.95, 546.49, null, 0.64, null, null, 3.52,
+ checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 187, 50.00, null, 0.81907897, 40.95, 546.49, null, 0.63, null, null, 3.51,
null);
- checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 188, 50.00, null, 0.81820528, 40.91, 497.08, null, 0.58, null, null, 2.94,
+ checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 188, 50.00, null, 0.81820528, 40.91, 497.08, null, 0.59, null, null, 2.92,
null);
- checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 189, 50.00, null, 0.81733252, 40.87, 447.61, null, 0.53, null, null, 2.41,
+ checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 189, 50.00, null, 0.81733252, 40.87, 447.61, null, 0.53, null, null, 2.39,
null);
- checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 190, 50.00, null, 0.81646069, 40.82, 398.08, null, 0.48, null, null, 1.93,
+ checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 190, 50.00, null, 0.81646069, 40.82, 398.08, null, 0.47, null, null, 1.92,
null);
- checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 191, 50.00, null, 0.81558979, 40.78, 348.51, null, 0.43, null, null, 1.50,
+ checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 191, 50.00, null, 0.81558979, 40.78, 348.51, null, 0.43, null, null, 1.49,
null);
- checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 192, 50.00, null, 0.81471983, 40.74, 298.88, null, 0.37, null, null, 1.13,
+ checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 192, 50.00, null, 0.81471983, 40.74, 298.88, null, 0.37, null, null, 1.12,
null);
- checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 193, 50.00, null, 0.81385078, 40.69, 249.20, null, 0.32, null, null, 0.81,
+ checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 193, 50.00, null, 0.81385078, 40.69, 249.20, null, 0.32, null, null, 0.80,
null);
- checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 194, 50.00, null, 0.81298267, 40.65, 199.47, null, 0.27, null, null, 0.54,
+ checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 194, 50.00, null, 0.81298267, 40.65, 199.47, null, 0.27, null, null, 0.53,
null);
- checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 195, 50.00, null, 0.81211548, 40.61, 149.68, null, 0.21, null, null, 0.33,
+ checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 195, 50.00, null, 0.81211548, 40.61, 149.68, null, 0.21, null, null, 0.32,
null);
- checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 196, 50.00, null, 0.81124922, 40.56, 99.84, null, 0.16, null, null, 0.17,
+ checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 196, 50.00, null, 0.81124922, 40.56, 99.84, null, 0.16, null, null, 0.16,
null);
- checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 197, 50.00, null, 0.81038388, 40.52, 49.95, null, 0.11, null, null, 0.06,
+ checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 197, 50.00, null, 0.81038388, 40.52, 49.95, null, 0.11, null, null, 0.05,
null);
- checkInst(model, 200, 200, LocalDate.of(2019, 7, 20), 198, 50.00, null, 0.80951946, 40.48, 0.00, null, 0.06, null, null, 0.00,
+ checkInst(model, 200, 200, LocalDate.of(2019, 7, 20), 198, 50.00, null, 0.80951946, 40.48, 0.00, null, 0.05, null, null, 0.00,
null);
}
@@ -973,388 +973,388 @@ void testExcessPayment_term200_discountFee1000_netDisbursement9000_pay70_80() {
checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 3, 50.00, null, 0.99680339, 49.84, 8757.01, null, 9.39, null, null, 942.99, null);
checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 4, 50.00, null, 0.99574012, 49.79, 8716.36, null, 9.35, null, null, 933.64, null);
checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 5, 50.00, null, 0.99467799, 49.73, 8675.67, null, 9.31, null, null, 924.33, null);
- checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 6, 50.00, null, 0.99361699, 49.68, 8634.94, null, 9.26, null, null, 915.07, null);
- checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 7, 50.00, null, 0.99255712, 49.63, 8594.16, null, 9.22, null, null, 905.85, null);
- checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 8, 50.00, null, 0.99149839, 49.57, 8553.33, null, 9.18, null, null, 896.67,
+ checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 6, 50.00, null, 0.99361699, 49.68, 8634.94, null, 9.27, null, null, 915.06, null);
+ checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 7, 50.00, null, 0.99255712, 49.63, 8594.16, null, 9.22, null, null, 905.84, null);
+ checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 8, 50.00, null, 0.99149839, 49.57, 8553.33, null, 9.17, null, null, 896.67,
null);
- checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 9, 50.00, null, 0.99044078, 49.52, 8512.47, null, 9.13, null, null, 887.54,
+ checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 9, 50.00, null, 0.99044078, 49.52, 8512.47, null, 9.14, null, null, 887.53,
null);
- checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 10, 50.00, null, 0.98938430, 49.47, 8471.56, null, 9.09, null, null, 878.45,
+ checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 10, 50.00, null, 0.98938430, 49.47, 8471.56, null, 9.09, null, null, 878.44,
null);
- checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 11, 50.00, null, 0.98832895, 49.42, 8430.60, null, 9.05, null, null, 869.40,
+ checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 11, 50.00, null, 0.98832895, 49.42, 8430.60, null, 9.04, null, null, 869.40,
null);
- checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 12, 50.00, null, 0.98727472, 49.36, 8389.61, null, 9.00, null, null, 860.40,
+ checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 12, 50.00, null, 0.98727472, 49.36, 8389.61, null, 9.01, null, null, 860.39,
null);
- checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 13, 50.00, null, 0.98622162, 49.31, 8348.56, null, 8.96, null, null, 851.44,
+ checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 13, 50.00, null, 0.98622162, 49.31, 8348.56, null, 8.95, null, null, 851.44,
null);
- checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 14, 50.00, null, 0.98516964, 49.26, 8307.48, null, 8.91, null, null, 842.53,
+ checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 14, 50.00, null, 0.98516964, 49.26, 8307.48, null, 8.92, null, null, 842.52,
null);
- checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 15, 50.00, null, 0.98411879, 49.21, 8266.35, null, 8.87, null, null, 833.66,
+ checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 15, 50.00, null, 0.98411879, 49.21, 8266.35, null, 8.87, null, null, 833.65,
null);
- checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 16, 50.00, null, 0.98306905, 49.15, 8225.18, null, 8.83, null, null, 824.83,
+ checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 16, 50.00, null, 0.98306905, 49.15, 8225.18, null, 8.83, null, null, 824.82,
null);
- checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 17, 50.00, null, 0.98202044, 49.10, 8183.96, null, 8.78, null, null, 816.05,
+ checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 17, 50.00, null, 0.98202044, 49.10, 8183.96, null, 8.78, null, null, 816.04,
null);
- checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 18, 50.00, null, 0.98097294, 49.05, 8142.70, null, 8.74, null, null, 807.31,
+ checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 18, 50.00, null, 0.98097294, 49.05, 8142.70, null, 8.74, null, null, 807.30,
null);
- checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 19, 50.00, null, 0.97992656, 49.00, 8101.39, null, 8.69, null, null, 798.62,
+ checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 19, 50.00, null, 0.97992656, 49.00, 8101.39, null, 8.69, null, null, 798.61,
null);
- checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 20, 50.00, null, 0.97888129, 48.94, 8060.04, null, 8.65, null, null, 789.97,
+ checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 20, 50.00, null, 0.97888129, 48.94, 8060.04, null, 8.65, null, null, 789.96,
null);
- checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 21, 50.00, null, 0.97783715, 48.89, 8018.65, null, 8.61, null, null, 781.36,
+ checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 21, 50.00, null, 0.97783715, 48.89, 8018.65, null, 8.61, null, null, 781.35,
null);
- checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 22, 50.00, null, 0.97679411, 48.84, 7977.21, null, 8.56, null, null, 772.80,
+ checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 22, 50.00, null, 0.97679411, 48.84, 7977.21, null, 8.56, null, null, 772.79,
null);
- checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 23, 50.00, null, 0.97575219, 48.79, 7935.73, null, 8.52, null, null, 764.28,
+ checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 23, 50.00, null, 0.97575219, 48.79, 7935.73, null, 8.52, null, null, 764.27,
null);
- checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 24, 50.00, null, 0.97471138, 48.74, 7894.21, null, 8.47, null, null, 755.81,
+ checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 24, 50.00, null, 0.97471138, 48.74, 7894.21, null, 8.48, null, null, 755.79,
null);
- checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 25, 50.00, null, 0.97367168, 48.68, 7852.63, null, 8.43, null, null, 747.38,
+ checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 25, 50.00, null, 0.97367168, 48.68, 7852.63, null, 8.42, null, null, 747.37,
null);
- checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 26, 50.00, null, 0.97263309, 48.63, 7811.02, null, 8.39, null, null, 738.99,
+ checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 26, 50.00, null, 0.97263309, 48.63, 7811.02, null, 8.39, null, null, 738.98,
null);
- checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 27, 50.00, null, 0.97159560, 48.58, 7769.36, null, 8.34, null, null, 730.65,
+ checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 27, 50.00, null, 0.97159560, 48.58, 7769.36, null, 8.34, null, null, 730.64,
null);
- checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 28, 50.00, null, 0.97055922, 48.53, 7727.66, null, 8.30, null, null, 722.35,
+ checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 28, 50.00, null, 0.97055922, 48.53, 7727.66, null, 8.30, null, null, 722.34,
null);
- checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 29, 50.00, null, 0.96952395, 48.48, 7685.91, null, 8.25, null, null, 714.10,
+ checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 29, 50.00, null, 0.96952395, 48.48, 7685.91, null, 8.25, null, null, 714.09,
null);
- checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 30, 50.00, null, 0.96848979, 48.42, 7644.12, null, 8.21, null, null, 705.89,
+ checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 30, 50.00, null, 0.96848979, 48.42, 7644.12, null, 8.21, null, null, 705.88,
null);
- checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 31, 50.00, null, 0.96745672, 48.37, 7602.28, null, 8.16, null, null, 697.73,
+ checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 31, 50.00, null, 0.96745672, 48.37, 7602.28, null, 8.16, null, null, 697.72,
null);
- checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 32, 50.00, null, 0.96642476, 48.32, 7560.40, null, 8.12, null, null, 689.61,
+ checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 32, 50.00, null, 0.96642476, 48.32, 7560.40, null, 8.12, null, null, 689.60,
null);
- checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 33, 50.00, null, 0.96539390, 48.27, 7518.47, null, 8.07, null, null, 681.54,
+ checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 33, 50.00, null, 0.96539390, 48.27, 7518.47, null, 8.07, null, null, 681.53,
null);
- checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 34, 50.00, null, 0.96436413, 48.22, 7476.50, null, 8.03, null, null, 673.51,
+ checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 34, 50.00, null, 0.96436413, 48.22, 7476.50, null, 8.03, null, null, 673.50,
null);
- checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 35, 50.00, null, 0.96333547, 48.17, 7434.48, null, 7.98, null, null, 665.53,
+ checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 35, 50.00, null, 0.96333547, 48.17, 7434.48, null, 7.98, null, null, 665.52,
null);
- checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 36, 50.00, null, 0.96230790, 48.12, 7392.42, null, 7.94, null, null, 657.59,
+ checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 36, 50.00, null, 0.96230790, 48.12, 7392.42, null, 7.94, null, null, 657.58,
null);
- checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 37, 50.00, null, 0.96128143, 48.06, 7350.31, null, 7.89, null, null, 649.70,
+ checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 37, 50.00, null, 0.96128143, 48.06, 7350.31, null, 7.89, null, null, 649.69,
null);
- checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 38, 50.00, null, 0.96025606, 48.01, 7308.16, null, 7.85, null, null, 641.85,
+ checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 38, 50.00, null, 0.96025606, 48.01, 7308.16, null, 7.85, null, null, 641.84,
null);
- checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 39, 50.00, null, 0.95923178, 47.96, 7265.97, null, 7.80, null, null, 634.05,
+ checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 39, 50.00, null, 0.95923178, 47.96, 7265.97, null, 7.81, null, null, 634.03,
null);
- checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 40, 50.00, null, 0.95820859, 47.91, 7223.72, null, 7.76, null, null, 626.29,
+ checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 40, 50.00, null, 0.95820859, 47.91, 7223.72, null, 7.75, null, null, 626.28,
null);
- checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 41, 50.00, null, 0.95718649, 47.86, 7181.44, null, 7.71, null, null, 618.58,
+ checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 41, 50.00, null, 0.95718649, 47.86, 7181.44, null, 7.72, null, null, 618.56,
null);
- checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 42, 50.00, null, 0.95616548, 47.81, 7139.11, null, 7.67, null, null, 610.91,
+ checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 42, 50.00, null, 0.95616548, 47.81, 7139.11, null, 7.67, null, null, 610.89,
null);
- checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 43, 50.00, null, 0.95514557, 47.76, 7096.73, null, 7.62, null, null, 603.29,
+ checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 43, 50.00, null, 0.95514557, 47.76, 7096.73, null, 7.62, null, null, 603.27,
null);
- checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 44, 50.00, null, 0.95412674, 47.71, 7054.31, null, 7.58, null, null, 595.71,
+ checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 44, 50.00, null, 0.95412674, 47.71, 7054.31, null, 7.58, null, null, 595.69,
null);
- checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 45, 50.00, null, 0.95310899, 47.66, 7011.84, null, 7.53, null, null, 588.18,
+ checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 45, 50.00, null, 0.95310899, 47.66, 7011.84, null, 7.53, null, null, 588.16,
null);
- checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 46, 50.00, null, 0.95209233, 47.60, 6969.33, null, 7.49, null, null, 580.69,
+ checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 46, 50.00, null, 0.95209233, 47.60, 6969.33, null, 7.49, null, null, 580.67,
null);
- checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 47, 50.00, null, 0.95107676, 47.55, 6926.77, null, 7.44, null, null, 573.25,
+ checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 47, 50.00, null, 0.95107676, 47.55, 6926.77, null, 7.44, null, null, 573.23,
null);
- checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 48, 50.00, null, 0.95006227, 47.50, 6884.17, null, 7.40, null, null, 565.85,
+ checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 48, 50.00, null, 0.95006227, 47.50, 6884.17, null, 7.40, null, null, 565.83,
null);
- checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 49, 50.00, null, 0.94904886, 47.45, 6841.52, null, 7.35, null, null, 558.50,
+ checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 49, 50.00, null, 0.94904886, 47.45, 6841.52, null, 7.35, null, null, 558.48,
null);
- checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 50, 50.00, null, 0.94803653, 47.40, 6798.82, null, 7.31, null, null, 551.19,
+ checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 50, 50.00, null, 0.94803653, 47.40, 6798.82, null, 7.30, null, null, 551.18,
null);
- checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 51, 50.00, null, 0.94702529, 47.35, 6756.08, null, 7.26, null, null, 543.93,
+ checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 51, 50.00, null, 0.94702529, 47.35, 6756.08, null, 7.26, null, null, 543.92,
null);
- checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 52, 50.00, null, 0.94601512, 47.30, 6713.30, null, 7.21, null, null, 536.72,
+ checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 52, 50.00, null, 0.94601512, 47.30, 6713.30, null, 7.22, null, null, 536.70,
null);
- checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 53, 50.00, null, 0.94500603, 47.25, 6670.47, null, 7.17, null, null, 529.55,
+ checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 53, 50.00, null, 0.94500603, 47.25, 6670.47, null, 7.17, null, null, 529.53,
null);
- checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 54, 50.00, null, 0.94399801, 47.20, 6627.59, null, 7.12, null, null, 522.43,
+ checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 54, 50.00, null, 0.94399801, 47.20, 6627.59, null, 7.12, null, null, 522.41,
null);
- checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 55, 50.00, null, 0.94299107, 47.15, 6584.67, null, 7.08, null, null, 515.35,
+ checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 55, 50.00, null, 0.94299107, 47.15, 6584.67, null, 7.08, null, null, 515.33,
null);
- checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 56, 50.00, null, 0.94198521, 47.10, 6541.70, null, 7.03, null, null, 508.32,
+ checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 56, 50.00, null, 0.94198521, 47.10, 6541.70, null, 7.03, null, null, 508.30,
null);
- checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 57, 50.00, null, 0.94098042, 47.05, 6498.68, null, 6.99, null, null, 501.33,
+ checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 57, 50.00, null, 0.94098042, 47.05, 6498.68, null, 6.98, null, null, 501.32,
null);
- checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 58, 50.00, null, 0.93997669, 47.00, 6455.62, null, 6.94, null, null, 494.39,
+ checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 58, 50.00, null, 0.93997669, 47.00, 6455.62, null, 6.94, null, null, 494.38,
null);
- checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 59, 50.00, null, 0.93897404, 46.95, 6412.51, null, 6.89, null, null, 487.50,
+ checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 59, 50.00, null, 0.93897404, 46.95, 6412.51, null, 6.89, null, null, 487.49,
null);
- checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 60, 50.00, null, 0.93797246, 46.90, 6369.36, null, 6.85, null, null, 480.65,
+ checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 60, 50.00, null, 0.93797246, 46.90, 6369.36, null, 6.85, null, null, 480.64,
null);
- checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 61, 50.00, null, 0.93697195, 46.85, 6326.16, null, 6.80, null, null, 473.85,
+ checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 61, 50.00, null, 0.93697195, 46.85, 6326.16, null, 6.80, null, null, 473.84,
null);
- checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 62, 50.00, null, 0.93597251, 46.80, 6282.92, null, 6.76, null, null, 467.09,
+ checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 62, 50.00, null, 0.93597251, 46.80, 6282.92, null, 6.76, null, null, 467.08,
null);
- checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 63, 50.00, null, 0.93497413, 46.75, 6239.63, null, 6.71, null, null, 460.38,
+ checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 63, 50.00, null, 0.93497413, 46.75, 6239.63, null, 6.71, null, null, 460.37,
null);
- checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 64, 50.00, null, 0.93397681, 46.70, 6196.29, null, 6.66, null, null, 453.72,
+ checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 64, 50.00, null, 0.93397681, 46.70, 6196.29, null, 6.66, null, null, 453.71,
null);
- checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 65, 50.00, null, 0.93298056, 46.65, 6152.91, null, 6.62, null, null, 447.10,
+ checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 65, 50.00, null, 0.93298056, 46.65, 6152.91, null, 6.62, null, null, 447.09,
null);
- checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 66, 50.00, null, 0.93198538, 46.60, 6109.48, null, 6.57, null, null, 440.53,
+ checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 66, 50.00, null, 0.93198538, 46.60, 6109.48, null, 6.57, null, null, 440.52,
null);
- checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 67, 50.00, null, 0.93099125, 46.55, 6066.00, null, 6.52, null, null, 434.01,
+ checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 67, 50.00, null, 0.93099125, 46.55, 6066.00, null, 6.52, null, null, 434.00,
null);
- checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 68, 50.00, null, 0.92999818, 46.50, 6022.48, null, 6.48, null, null, 427.53,
+ checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 68, 50.00, null, 0.92999818, 46.50, 6022.48, null, 6.48, null, null, 427.52,
null);
- checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 69, 50.00, null, 0.92900618, 46.45, 5978.91, null, 6.43, null, null, 421.10,
+ checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 69, 50.00, null, 0.92900618, 46.45, 5978.91, null, 6.43, null, null, 421.09,
null);
- checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 70, 50.00, null, 0.92801523, 46.40, 5935.29, null, 6.38, null, null, 414.72,
+ checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 70, 50.00, null, 0.92801523, 46.40, 5935.29, null, 6.38, null, null, 414.71,
null);
- checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 71, 50.00, null, 0.92702534, 46.35, 5891.63, null, 6.34, null, null, 408.38,
+ checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 71, 50.00, null, 0.92702534, 46.35, 5891.63, null, 6.34, null, null, 408.37,
null);
- checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 72, 50.00, null, 0.92603650, 46.30, 5847.92, null, 6.29, null, null, 402.09,
+ checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 72, 50.00, null, 0.92603650, 46.30, 5847.92, null, 6.29, null, null, 402.08,
null);
- checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 73, 50.00, null, 0.92504872, 46.25, 5804.17, null, 6.24, null, null, 395.85,
+ checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 73, 50.00, null, 0.92504872, 46.25, 5804.17, null, 6.25, null, null, 395.83,
null);
- checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 74, 50.00, null, 0.92406200, 46.20, 5760.36, null, 6.20, null, null, 389.65,
+ checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 74, 50.00, null, 0.92406200, 46.20, 5760.36, null, 6.19, null, null, 389.64,
null);
- checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 75, 50.00, null, 0.92307632, 46.15, 5716.52, null, 6.15, null, null, 383.50,
+ checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 75, 50.00, null, 0.92307632, 46.15, 5716.52, null, 6.16, null, null, 383.48,
null);
- checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 76, 50.00, null, 0.92209170, 46.10, 5672.62, null, 6.10, null, null, 377.40,
+ checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 76, 50.00, null, 0.92209170, 46.10, 5672.62, null, 6.10, null, null, 377.38,
null);
- checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 77, 50.00, null, 0.92110813, 46.06, 5628.68, null, 6.06, null, null, 371.34,
+ checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 77, 50.00, null, 0.92110813, 46.06, 5628.68, null, 6.06, null, null, 371.32,
null);
- checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 78, 50.00, null, 0.92012560, 46.01, 5584.69, null, 6.01, null, null, 365.33,
+ checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 78, 50.00, null, 0.92012560, 46.01, 5584.69, null, 6.01, null, null, 365.31,
null);
- checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 79, 50.00, null, 0.91914413, 45.96, 5540.65, null, 5.96, null, null, 359.37,
+ checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 79, 50.00, null, 0.91914413, 45.96, 5540.65, null, 5.96, null, null, 359.35,
null);
- checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 80, 50.00, null, 0.91816370, 45.91, 5496.57, null, 5.92, null, null, 353.45,
+ checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 80, 50.00, null, 0.91816370, 45.91, 5496.57, null, 5.92, null, null, 353.43,
null);
- checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 81, 50.00, null, 0.91718432, 45.86, 5452.44, null, 5.87, null, null, 347.58,
+ checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 81, 50.00, null, 0.91718432, 45.86, 5452.44, null, 5.87, null, null, 347.56,
null);
- checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 82, 50.00, null, 0.91620598, 45.81, 5408.26, null, 5.82, null, null, 341.76,
+ checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 82, 50.00, null, 0.91620598, 45.81, 5408.26, null, 5.82, null, null, 341.74,
null);
- checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 83, 50.00, null, 0.91522868, 45.76, 5364.03, null, 5.78, null, null, 335.98,
+ checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 83, 50.00, null, 0.91522868, 45.76, 5364.03, null, 5.77, null, null, 335.97,
null);
- checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 84, 50.00, null, 0.91425243, 45.71, 5319.76, null, 5.73, null, null, 330.25,
+ checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 84, 50.00, null, 0.91425243, 45.71, 5319.76, null, 5.73, null, null, 330.24,
null);
- checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 85, 50.00, null, 0.91327722, 45.66, 5275.44, null, 5.68, null, null, 324.57,
+ checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 85, 50.00, null, 0.91327722, 45.66, 5275.44, null, 5.68, null, null, 324.56,
null);
- checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 86, 50.00, null, 0.91230305, 45.62, 5231.08, null, 5.63, null, null, 318.94,
+ checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 86, 50.00, null, 0.91230305, 45.62, 5231.08, null, 5.64, null, null, 318.92,
null);
- checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 87, 50.00, null, 0.91132992, 45.57, 5186.66, null, 5.59, null, null, 313.35,
+ checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 87, 50.00, null, 0.91132992, 45.57, 5186.66, null, 5.58, null, null, 313.34,
null);
- checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 88, 50.00, null, 0.91035783, 45.52, 5142.20, null, 5.54, null, null, 307.81,
+ checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 88, 50.00, null, 0.91035783, 45.52, 5142.20, null, 5.54, null, null, 307.80,
null);
- checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 89, 50.00, null, 0.90938677, 45.47, 5097.69, null, 5.49, null, null, 302.32,
+ checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 89, 50.00, null, 0.90938677, 45.47, 5097.69, null, 5.49, null, null, 302.31,
null);
- checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 90, 50.00, null, 0.90841675, 45.42, 5053.13, null, 5.44, null, null, 296.88,
+ checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 90, 50.00, null, 0.90841675, 45.42, 5053.13, null, 5.44, null, null, 296.87,
null);
- checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 91, 50.00, null, 0.90744776, 45.37, 5008.53, null, 5.40, null, null, 291.48,
+ checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 91, 50.00, null, 0.90744776, 45.37, 5008.53, null, 5.40, null, null, 291.47,
null);
- checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 92, 50.00, null, 0.90647981, 45.32, 4963.88, null, 5.35, null, null, 286.13,
+ checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 92, 50.00, null, 0.90647981, 45.32, 4963.88, null, 5.35, null, null, 286.12,
null);
- checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 93, 50.00, null, 0.90551289, 45.28, 4919.18, null, 5.30, null, null, 280.83,
+ checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 93, 50.00, null, 0.90551289, 45.28, 4919.18, null, 5.30, null, null, 280.82,
null);
- checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 94, 50.00, null, 0.90454700, 45.23, 4874.43, null, 5.25, null, null, 275.58,
+ checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 94, 50.00, null, 0.90454700, 45.23, 4874.43, null, 5.25, null, null, 275.57,
null);
- checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 95, 50.00, null, 0.90358215, 45.18, 4829.64, null, 5.20, null, null, 270.38,
+ checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 95, 50.00, null, 0.90358215, 45.18, 4829.64, null, 5.21, null, null, 270.36,
null);
- checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 96, 50.00, null, 0.90261832, 45.13, 4784.79, null, 5.16, null, null, 265.22,
+ checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 96, 50.00, null, 0.90261832, 45.13, 4784.79, null, 5.15, null, null, 265.21,
null);
- checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 97, 50.00, null, 0.90165552, 45.08, 4739.90, null, 5.11, null, null, 260.11,
+ checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 97, 50.00, null, 0.90165552, 45.08, 4739.90, null, 5.11, null, null, 260.10,
null);
- checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 98, 50.00, null, 0.90069374, 45.03, 4694.96, null, 5.06, null, null, 255.05,
+ checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 98, 50.00, null, 0.90069374, 45.03, 4694.96, null, 5.06, null, null, 255.04,
null);
- checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 99, 50.00, null, 0.89973299, 44.99, 4649.98, null, 5.01, null, null, 250.04,
+ checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 99, 50.00, null, 0.89973299, 44.99, 4649.98, null, 5.02, null, null, 250.02,
null);
- checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 100, 50.00, null, 0.89877327, 44.94, 4604.94, null, 4.97, null, null, 245.07,
+ checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 100, 50.00, null, 0.89877327, 44.94, 4604.94, null, 4.96, null, null, 245.06,
null);
- checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 101, 50.00, null, 0.89781457, 44.89, 4559.86, null, 4.92, null, null, 240.15,
+ checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 101, 50.00, null, 0.89781457, 44.89, 4559.86, null, 4.92, null, null, 240.14,
null);
- checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 102, 50.00, null, 0.89685689, 44.84, 4514.73, null, 4.87, null, null, 235.28,
+ checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 102, 50.00, null, 0.89685689, 44.84, 4514.73, null, 4.87, null, null, 235.27,
null);
- checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 103, 50.00, null, 0.89590024, 44.80, 4469.55, null, 4.82, null, null, 230.46,
+ checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 103, 50.00, null, 0.89590024, 44.80, 4469.55, null, 4.82, null, null, 230.45,
null);
- checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 104, 50.00, null, 0.89494460, 44.75, 4424.32, null, 4.77, null, null, 225.69,
+ checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 104, 50.00, null, 0.89494460, 44.75, 4424.32, null, 4.77, null, null, 225.68,
null);
- checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 105, 50.00, null, 0.89398999, 44.70, 4379.05, null, 4.72, null, null, 220.97,
+ checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 105, 50.00, null, 0.89398999, 44.70, 4379.05, null, 4.73, null, null, 220.95,
null);
- checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 106, 50.00, null, 0.89303639, 44.65, 4333.72, null, 4.68, null, null, 216.29,
+ checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 106, 50.00, null, 0.89303639, 44.65, 4333.72, null, 4.67, null, null, 216.28,
null);
- checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 107, 50.00, null, 0.89208381, 44.60, 4288.35, null, 4.63, null, null, 211.66,
+ checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 107, 50.00, null, 0.89208381, 44.60, 4288.35, null, 4.63, null, null, 211.65,
null);
- checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 108, 50.00, null, 0.89113225, 44.56, 4242.93, null, 4.58, null, null, 207.08,
+ checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 108, 50.00, null, 0.89113225, 44.56, 4242.93, null, 4.58, null, null, 207.07,
null);
- checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 109, 50.00, null, 0.89018170, 44.51, 4197.46, null, 4.53, null, null, 202.55,
+ checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 109, 50.00, null, 0.89018170, 44.51, 4197.46, null, 4.53, null, null, 202.54,
null);
- checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 110, 50.00, null, 0.88923216, 44.46, 4151.94, null, 4.48, null, null, 198.07,
+ checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 110, 50.00, null, 0.88923216, 44.46, 4151.94, null, 4.48, null, null, 198.06,
null);
- checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 111, 50.00, null, 0.88828364, 44.41, 4106.38, null, 4.43, null, null, 193.64,
+ checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 111, 50.00, null, 0.88828364, 44.41, 4106.38, null, 4.44, null, null, 193.62,
null);
- checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 112, 50.00, null, 0.88733613, 44.37, 4060.76, null, 4.38, null, null, 189.26,
+ checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 112, 50.00, null, 0.88733613, 44.37, 4060.76, null, 4.38, null, null, 189.24,
null);
- checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 113, 50.00, null, 0.88638963, 44.32, 4015.10, null, 4.34, null, null, 184.92,
+ checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 113, 50.00, null, 0.88638963, 44.32, 4015.10, null, 4.34, null, null, 184.90,
null);
- checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 114, 50.00, null, 0.88544414, 44.27, 3969.38, null, 4.29, null, null, 180.63,
+ checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 114, 50.00, null, 0.88544414, 44.27, 3969.38, null, 4.28, null, null, 180.62,
null);
- checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 115, 50.00, null, 0.88449966, 44.22, 3923.62, null, 4.24, null, null, 176.39,
+ checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 115, 50.00, null, 0.88449966, 44.22, 3923.62, null, 4.24, null, null, 176.38,
null);
- checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 116, 50.00, null, 0.88355619, 44.18, 3877.81, null, 4.19, null, null, 172.20,
+ checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 116, 50.00, null, 0.88355619, 44.18, 3877.81, null, 4.19, null, null, 172.19,
null);
- checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 117, 50.00, null, 0.88261372, 44.13, 3831.95, null, 4.14, null, null, 168.06,
+ checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 117, 50.00, null, 0.88261372, 44.13, 3831.95, null, 4.14, null, null, 168.05,
null);
- checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 118, 50.00, null, 0.88167226, 44.08, 3786.04, null, 4.09, null, null, 163.97,
+ checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 118, 50.00, null, 0.88167226, 44.08, 3786.04, null, 4.09, null, null, 163.96,
null);
- checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 119, 50.00, null, 0.88073180, 44.04, 3740.09, null, 4.04, null, null, 159.93,
+ checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 119, 50.00, null, 0.88073180, 44.04, 3740.09, null, 4.05, null, null, 159.91,
null);
- checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 120, 50.00, null, 0.87979234, 43.99, 3694.08, null, 3.99, null, null, 155.94,
+ checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 120, 50.00, null, 0.87979234, 43.99, 3694.08, null, 3.99, null, null, 155.92,
null);
- checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 121, 50.00, null, 0.87885389, 43.94, 3648.03, null, 3.94, null, null, 152.00,
+ checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 121, 50.00, null, 0.87885389, 43.94, 3648.03, null, 3.95, null, null, 151.97,
null);
- checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 122, 50.00, null, 0.87791644, 43.90, 3601.92, null, 3.90, null, null, 148.10,
+ checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 122, 50.00, null, 0.87791644, 43.90, 3601.92, null, 3.89, null, null, 148.08,
null);
- checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 123, 50.00, null, 0.87697999, 43.85, 3555.77, null, 3.85, null, null, 144.25,
+ checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 123, 50.00, null, 0.87697999, 43.85, 3555.77, null, 3.85, null, null, 144.23,
null);
- checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 124, 50.00, null, 0.87604453, 43.80, 3509.56, null, 3.80, null, null, 140.45,
+ checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 124, 50.00, null, 0.87604453, 43.80, 3509.56, null, 3.79, null, null, 140.44,
null);
- checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 125, 50.00, null, 0.87511008, 43.76, 3463.31, null, 3.75, null, null, 136.70,
+ checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 125, 50.00, null, 0.87511008, 43.76, 3463.31, null, 3.75, null, null, 136.69,
null);
- checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 126, 50.00, null, 0.87417662, 43.71, 3417.01, null, 3.70, null, null, 133.00,
+ checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 126, 50.00, null, 0.87417662, 43.71, 3417.01, null, 3.70, null, null, 132.99,
null);
- checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 127, 50.00, null, 0.87324416, 43.66, 3370.66, null, 3.65, null, null, 129.35,
+ checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 127, 50.00, null, 0.87324416, 43.66, 3370.66, null, 3.65, null, null, 129.34,
null);
- checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 128, 50.00, null, 0.87231269, 43.62, 3324.26, null, 3.60, null, null, 125.75,
+ checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 128, 50.00, null, 0.87231269, 43.62, 3324.26, null, 3.60, null, null, 125.74,
null);
- checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 129, 50.00, null, 0.87138221, 43.57, 3277.81, null, 3.55, null, null, 122.20,
+ checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 129, 50.00, null, 0.87138221, 43.57, 3277.81, null, 3.55, null, null, 122.19,
null);
- checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 130, 50.00, null, 0.87045273, 43.52, 3231.31, null, 3.50, null, null, 118.70,
+ checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 130, 50.00, null, 0.87045273, 43.52, 3231.31, null, 3.50, null, null, 118.69,
null);
- checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 131, 50.00, null, 0.86952424, 43.48, 3184.76, null, 3.45, null, null, 115.25,
+ checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 131, 50.00, null, 0.86952424, 43.48, 3184.76, null, 3.45, null, null, 115.24,
null);
- checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 132, 50.00, null, 0.86859674, 43.43, 3138.16, null, 3.40, null, null, 111.85,
+ checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 132, 50.00, null, 0.86859674, 43.43, 3138.16, null, 3.40, null, null, 111.84,
null);
- checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 133, 50.00, null, 0.86767023, 43.38, 3091.51, null, 3.35, null, null, 108.50,
+ checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 133, 50.00, null, 0.86767023, 43.38, 3091.51, null, 3.35, null, null, 108.49,
null);
- checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 134, 50.00, null, 0.86674471, 43.34, 3044.81, null, 3.30, null, null, 105.20,
+ checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 134, 50.00, null, 0.86674471, 43.34, 3044.81, null, 3.30, null, null, 105.19,
null);
- checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 135, 50.00, null, 0.86582017, 43.29, 2998.06, null, 3.25, null, null, 101.95,
+ checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 135, 50.00, null, 0.86582017, 43.29, 2998.06, null, 3.25, null, null, 101.94,
null);
- checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 136, 50.00, null, 0.86489662, 43.24, 2951.26, null, 3.20, null, null, 98.75,
+ checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 136, 50.00, null, 0.86489662, 43.24, 2951.26, null, 3.20, null, null, 98.74,
null);
- checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 137, 50.00, null, 0.86397406, 43.20, 2904.42, null, 3.15, null, null, 95.60,
+ checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 137, 50.00, null, 0.86397406, 43.20, 2904.42, null, 3.16, null, null, 95.58,
null);
- checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 138, 50.00, null, 0.86305248, 43.15, 2857.52, null, 3.10, null, null, 92.50,
+ checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 138, 50.00, null, 0.86305248, 43.15, 2857.52, null, 3.10, null, null, 92.48,
null);
- checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 139, 50.00, null, 0.86213188, 43.11, 2810.57, null, 3.05, null, null, 89.45,
+ checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 139, 50.00, null, 0.86213188, 43.11, 2810.57, null, 3.05, null, null, 89.43,
null);
- checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 140, 50.00, null, 0.86121227, 43.06, 2763.57, null, 3.00, null, null, 86.45,
+ checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 140, 50.00, null, 0.86121227, 43.06, 2763.57, null, 3.00, null, null, 86.43,
null);
- checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 141, 50.00, null, 0.86029363, 43.01, 2716.52, null, 2.95, null, null, 83.50,
+ checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 141, 50.00, null, 0.86029363, 43.01, 2716.52, null, 2.95, null, null, 83.48,
null);
- checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 142, 50.00, null, 0.85937598, 42.97, 2669.42, null, 2.90, null, null, 80.60,
+ checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 142, 50.00, null, 0.85937598, 42.97, 2669.42, null, 2.90, null, null, 80.58,
null);
- checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 143, 50.00, null, 0.85845930, 42.92, 2622.27, null, 2.85, null, null, 77.75,
+ checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 143, 50.00, null, 0.85845930, 42.92, 2622.27, null, 2.85, null, null, 77.73,
null);
- checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 144, 50.00, null, 0.85754361, 42.88, 2575.07, null, 2.80, null, null, 74.95,
+ checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 144, 50.00, null, 0.85754361, 42.88, 2575.07, null, 2.80, null, null, 74.93,
null);
- checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 145, 50.00, null, 0.85662889, 42.83, 2527.82, null, 2.75, null, null, 72.20,
+ checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 145, 50.00, null, 0.85662889, 42.83, 2527.82, null, 2.75, null, null, 72.18,
null);
- checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 146, 50.00, null, 0.85571514, 42.79, 2480.52, null, 2.70, null, null, 69.50,
+ checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 146, 50.00, null, 0.85571514, 42.79, 2480.52, null, 2.70, null, null, 69.48,
null);
- checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 147, 50.00, null, 0.85480237, 42.74, 2433.17, null, 2.65, null, null, 66.85,
+ checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 147, 50.00, null, 0.85480237, 42.74, 2433.17, null, 2.65, null, null, 66.83,
null);
- checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 148, 50.00, null, 0.85389057, 42.69, 2385.77, null, 2.60, null, null, 64.25,
+ checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 148, 50.00, null, 0.85389057, 42.69, 2385.77, null, 2.60, null, null, 64.23,
null);
- checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 149, 50.00, null, 0.85297975, 42.65, 2338.31, null, 2.55, null, null, 61.70,
+ checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 149, 50.00, null, 0.85297975, 42.65, 2338.31, null, 2.54, null, null, 61.69,
null);
- checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 150, 50.00, null, 0.85206990, 42.60, 2290.81, null, 2.50, null, null, 59.20,
+ checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 150, 50.00, null, 0.85206990, 42.60, 2290.81, null, 2.50, null, null, 59.19,
null);
- checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 151, 50.00, null, 0.85116101, 42.56, 2243.26, null, 2.45, null, null, 56.75,
+ checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 151, 50.00, null, 0.85116101, 42.56, 2243.26, null, 2.45, null, null, 56.74,
null);
- checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 152, 50.00, null, 0.85025310, 42.51, 2195.65, null, 2.40, null, null, 54.35,
+ checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 152, 50.00, null, 0.85025310, 42.51, 2195.65, null, 2.39, null, null, 54.35,
null);
- checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 153, 50.00, null, 0.84934616, 42.47, 2148.00, null, 2.34, null, null, 52.01,
+ checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 153, 50.00, null, 0.84934616, 42.47, 2148.00, null, 2.35, null, null, 52.00,
null);
- checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 154, 50.00, null, 0.84844018, 42.42, 2100.29, null, 2.29, null, null, 49.72,
+ checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 154, 50.00, null, 0.84844018, 42.42, 2100.29, null, 2.29, null, null, 49.71,
null);
- checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 155, 50.00, null, 0.84753517, 42.38, 2052.53, null, 2.24, null, null, 47.48,
+ checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 155, 50.00, null, 0.84753517, 42.38, 2052.53, null, 2.24, null, null, 47.47,
null);
- checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 156, 50.00, null, 0.84663113, 42.33, 2004.73, null, 2.19, null, null, 45.29,
+ checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 156, 50.00, null, 0.84663113, 42.33, 2004.73, null, 2.20, null, null, 45.27,
null);
- checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 157, 50.00, null, 0.84572805, 42.29, 1956.87, null, 2.14, null, null, 43.15,
+ checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 157, 50.00, null, 0.84572805, 42.29, 1956.87, null, 2.14, null, null, 43.13,
null);
- checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 158, 50.00, null, 0.84482593, 42.24, 1908.96, null, 2.09, null, null, 41.06,
+ checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 158, 50.00, null, 0.84482593, 42.24, 1908.96, null, 2.09, null, null, 41.04,
null);
- checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 159, 50.00, null, 0.84392477, 42.20, 1860.99, null, 2.04, null, null, 39.02,
+ checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 159, 50.00, null, 0.84392477, 42.20, 1860.99, null, 2.03, null, null, 39.01,
null);
- checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 160, 50.00, null, 0.84302458, 42.15, 1812.98, null, 1.99, null, null, 37.03,
+ checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 160, 50.00, null, 0.84302458, 42.15, 1812.98, null, 1.99, null, null, 37.02,
null);
- checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 161, 50.00, null, 0.84212535, 42.11, 1764.92, null, 1.94, null, null, 35.09,
+ checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 161, 50.00, null, 0.84212535, 42.11, 1764.92, null, 1.94, null, null, 35.08,
null);
- checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 162, 50.00, null, 0.84122707, 42.06, 1716.80, null, 1.88, null, null, 33.21,
+ checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 162, 50.00, null, 0.84122707, 42.06, 1716.80, null, 1.88, null, null, 33.20,
null);
- checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 163, 50.00, null, 0.84032975, 42.02, 1668.64, null, 1.83, null, null, 31.38,
+ checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 163, 50.00, null, 0.84032975, 42.02, 1668.64, null, 1.84, null, null, 31.36,
null);
- checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 164, 50.00, null, 0.83943340, 41.97, 1620.42, null, 1.78, null, null, 29.60,
+ checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 164, 50.00, null, 0.83943340, 41.97, 1620.42, null, 1.78, null, null, 29.58,
null);
- checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 165, 50.00, null, 0.83853799, 41.93, 1572.15, null, 1.73, null, null, 27.87,
+ checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 165, 50.00, null, 0.83853799, 41.93, 1572.15, null, 1.73, null, null, 27.85,
null);
- checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 166, 50.00, null, 0.83764354, 41.88, 1523.83, null, 1.68, null, null, 26.19,
+ checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 166, 50.00, null, 0.83764354, 41.88, 1523.83, null, 1.68, null, null, 26.17,
null);
- checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 167, 50.00, null, 0.83675005, 41.84, 1475.45, null, 1.63, null, null, 24.56,
+ checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 167, 50.00, null, 0.83675005, 41.84, 1475.45, null, 1.62, null, null, 24.55,
null);
- checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 168, 50.00, null, 0.83585751, 41.79, 1427.03, null, 1.58, null, null, 22.98,
+ checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 168, 50.00, null, 0.83585751, 41.79, 1427.03, null, 1.58, null, null, 22.97,
null);
- checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 169, 50.00, null, 0.83496592, 41.75, 1378.55, null, 1.52, null, null, 21.46,
+ checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 169, 50.00, null, 0.83496592, 41.75, 1378.55, null, 1.52, null, null, 21.45,
null);
- checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 170, 50.00, null, 0.83407528, 41.70, 1330.02, null, 1.47, null, null, 19.99,
+ checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 170, 50.00, null, 0.83407528, 41.70, 1330.02, null, 1.47, null, null, 19.98,
null);
- checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 171, 50.00, null, 0.83318560, 41.66, 1281.45, null, 1.42, null, null, 18.57,
+ checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 171, 50.00, null, 0.83318560, 41.66, 1281.45, null, 1.43, null, null, 18.55,
null);
- checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 172, 50.00, null, 0.83229686, 41.61, 1232.81, null, 1.37, null, null, 17.20,
+ checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 172, 50.00, null, 0.83229686, 41.61, 1232.81, null, 1.36, null, null, 17.19,
null);
- checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 173, 50.00, null, 0.83140907, 41.57, 1184.13, null, 1.32, null, null, 15.88,
+ checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 173, 50.00, null, 0.83140907, 41.57, 1184.13, null, 1.32, null, null, 15.87,
null);
- checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 174, 50.00, null, 0.83052222, 41.53, 1135.39, null, 1.26, null, null, 14.62,
+ checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 174, 50.00, null, 0.83052222, 41.53, 1135.39, null, 1.26, null, null, 14.61,
null);
- checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 175, 50.00, null, 0.82963633, 41.48, 1086.61, null, 1.21, null, null, 13.41,
+ checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 175, 50.00, null, 0.82963633, 41.48, 1086.61, null, 1.22, null, null, 13.39,
null);
- checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 176, 50.00, null, 0.82875137, 41.44, 1037.77, null, 1.16, null, null, 12.25,
+ checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 176, 50.00, null, 0.82875137, 41.44, 1037.77, null, 1.16, null, null, 12.23,
null);
- checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 177, 50.00, null, 0.82786736, 41.39, 988.88, null, 1.11, null, null, 11.14,
+ checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 177, 50.00, null, 0.82786736, 41.39, 988.88, null, 1.11, null, null, 11.12,
null);
- checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 178, 50.00, null, 0.82698430, 41.35, 939.93, null, 1.06, null, null, 10.08,
+ checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 178, 50.00, null, 0.82698430, 41.35, 939.93, null, 1.05, null, null, 10.07,
null);
- checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 179, 50.00, null, 0.82610217, 41.31, 890.93, null, 1.00, null, null, 9.08,
+ checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 179, 50.00, null, 0.82610217, 41.31, 890.93, null, 1.00, null, null, 9.07,
null);
- checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 180, 50.00, null, 0.82522099, 41.26, 841.89, null, 0.95, null, null, 8.13,
+ checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 180, 50.00, null, 0.82522099, 41.26, 841.89, null, 0.96, null, null, 8.11,
null);
- checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 181, 50.00, null, 0.82434075, 41.22, 792.79, null, 0.90, null, null, 7.23,
+ checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 181, 50.00, null, 0.82434075, 41.22, 792.79, null, 0.90, null, null, 7.21,
null);
- checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 182, 50.00, null, 0.82346144, 41.17, 743.63, null, 0.85, null, null, 6.38,
+ checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 182, 50.00, null, 0.82346144, 41.17, 743.63, null, 0.84, null, null, 6.37,
null);
- checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 183, 50.00, null, 0.82258308, 41.13, 694.43, null, 0.79, null, null, 5.59,
+ checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 183, 50.00, null, 0.82258308, 41.13, 694.43, null, 0.80, null, null, 5.57,
null);
- checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 184, 50.00, null, 0.82170565, 41.09, 645.17, null, 0.74, null, null, 4.85,
+ checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 184, 50.00, null, 0.82170565, 41.09, 645.17, null, 0.74, null, null, 4.83,
null);
- checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 185, 50.00, null, 0.82082916, 41.04, 595.86, null, 0.69, null, null, 4.16,
+ checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 185, 50.00, null, 0.82082916, 41.04, 595.86, null, 0.69, null, null, 4.14,
null);
- checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 186, 50.00, null, 0.81995360, 41.00, 546.49, null, 0.64, null, null, 3.52,
+ checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 186, 50.00, null, 0.81995360, 41.00, 546.49, null, 0.63, null, null, 3.51,
null);
- checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 187, 50.00, null, 0.81907897, 40.95, 497.08, null, 0.58, null, null, 2.94,
+ checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 187, 50.00, null, 0.81907897, 40.95, 497.08, null, 0.59, null, null, 2.92,
null);
- checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 188, 50.00, null, 0.81820528, 40.91, 447.61, null, 0.53, null, null, 2.41,
+ checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 188, 50.00, null, 0.81820528, 40.91, 447.61, null, 0.53, null, null, 2.39,
null);
- checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 189, 50.00, null, 0.81733252, 40.87, 398.08, null, 0.48, null, null, 1.93,
+ checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 189, 50.00, null, 0.81733252, 40.87, 398.08, null, 0.47, null, null, 1.92,
null);
- checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 190, 50.00, null, 0.81646069, 40.82, 348.51, null, 0.43, null, null, 1.50,
+ checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 190, 50.00, null, 0.81646069, 40.82, 348.51, null, 0.43, null, null, 1.49,
null);
- checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 191, 50.00, null, 0.81558979, 40.78, 298.88, null, 0.37, null, null, 1.13,
+ checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 191, 50.00, null, 0.81558979, 40.78, 298.88, null, 0.37, null, null, 1.12,
null);
- checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 192, 50.00, null, 0.81471983, 40.74, 249.20, null, 0.32, null, null, 0.81,
+ checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 192, 50.00, null, 0.81471983, 40.74, 249.20, null, 0.32, null, null, 0.80,
null);
- checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 193, 50.00, null, 0.81385078, 40.69, 199.47, null, 0.27, null, null, 0.54,
+ checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 193, 50.00, null, 0.81385078, 40.69, 199.47, null, 0.27, null, null, 0.53,
null);
- checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 194, 50.00, null, 0.81298267, 40.65, 149.68, null, 0.21, null, null, 0.33,
+ checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 194, 50.00, null, 0.81298267, 40.65, 149.68, null, 0.21, null, null, 0.32,
null);
- checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 195, 50.00, null, 0.81211548, 40.61, 99.84, null, 0.16, null, null, 0.17,
+ checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 195, 50.00, null, 0.81211548, 40.61, 99.84, null, 0.16, null, null, 0.16,
null);
- checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 196, 50.00, null, 0.81124922, 40.56, 49.95, null, 0.11, null, null, 0.06,
+ checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 196, 50.00, null, 0.81124922, 40.56, 49.95, null, 0.11, null, null, 0.05,
null);
// Same reason: what is left to close, not a full instalment, which had driven the balance to -16.49.
- checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 197, 50.00, null, 0.81038388, 40.52, 0.00, null, 0.06, null, null, 0.00,
+ checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 197, 50.00, null, 0.81038388, 40.52, 0.00, null, 0.05, null, null, 0.00,
null);
assertEquals(200, model.projectedPayments().size(), "disbursement + 199 regular (period 200 removed, forecast was 0)");
@@ -1369,367 +1369,367 @@ void testLessPayment_term200_discountFee1000_netDisbursement9000_pay40() {
1000.00, 1000.00);
checkInst(model, 1, 1, LocalDate.of(2019, 1, 2), 0, 50.00, 40.00, 1.00000000, 40.00, 8959.61, 8967.69, 9.61, 7.69, -1.92, 990.39,
992.31);
- checkInst(model, 2, 2, LocalDate.of(2019, 1, 3), 1, 50.00, null, 0.99893332, 49.95, 8927.26, null, 9.58, null, null, 982.73, null);
- checkInst(model, 3, 3, LocalDate.of(2019, 1, 4), 2, 50.00, null, 0.99786779, 49.89, 8886.80, null, 9.53, null, null, 973.20, null);
+ checkInst(model, 2, 2, LocalDate.of(2019, 1, 3), 1, 50.00, null, 0.99893332, 49.95, 8927.26, null, 9.57, null, null, 982.74, null);
+ checkInst(model, 3, 3, LocalDate.of(2019, 1, 4), 2, 50.00, null, 0.99786779, 49.89, 8886.80, null, 9.54, null, null, 973.20, null);
checkInst(model, 4, 4, LocalDate.of(2019, 1, 5), 3, 50.00, null, 0.99680339, 49.84, 8846.29, null, 9.49, null, null, 963.71, null);
- checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 4, 50.00, null, 0.99574012, 49.79, 8805.73, null, 9.45, null, null, 954.26, null);
- checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 5, 50.00, null, 0.99467799, 49.73, 8765.14, null, 9.40, null, null, 944.86, null);
- checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 6, 50.00, null, 0.99361699, 49.68, 8724.49, null, 9.36, null, null, 935.50, null);
- checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 7, 50.00, null, 0.99255712, 49.63, 8683.81, null, 9.32, null, null, 926.18, null);
- checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 8, 50.00, null, 0.99149839, 49.57, 8643.08, null, 9.27, null, null, 916.91, null);
- checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 9, 50.00, null, 0.99044078, 49.52, 8602.31, null, 9.23, null, null, 907.68,
+ checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 4, 50.00, null, 0.99574012, 49.79, 8805.73, null, 9.44, null, null, 954.27, null);
+ checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 5, 50.00, null, 0.99467799, 49.73, 8765.14, null, 9.41, null, null, 944.86, null);
+ checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 6, 50.00, null, 0.99361699, 49.68, 8724.49, null, 9.35, null, null, 935.51, null);
+ checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 7, 50.00, null, 0.99255712, 49.63, 8683.81, null, 9.32, null, null, 926.19, null);
+ checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 8, 50.00, null, 0.99149839, 49.57, 8643.08, null, 9.27, null, null, 916.92, null);
+ checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 9, 50.00, null, 0.99044078, 49.52, 8602.31, null, 9.23, null, null, 907.69,
null);
- checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 10, 50.00, null, 0.98938430, 49.47, 8561.50, null, 9.19, null, null, 898.49,
+ checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 10, 50.00, null, 0.98938430, 49.47, 8561.50, null, 9.19, null, null, 898.50,
null);
- checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 11, 50.00, null, 0.98832895, 49.42, 8520.64, null, 9.14, null, null, 889.35,
+ checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 11, 50.00, null, 0.98832895, 49.42, 8520.64, null, 9.14, null, null, 889.36,
null);
- checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 12, 50.00, null, 0.98727472, 49.36, 8479.74, null, 9.10, null, null, 880.25,
+ checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 12, 50.00, null, 0.98727472, 49.36, 8479.74, null, 9.10, null, null, 880.26,
null);
- checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 13, 50.00, null, 0.98622162, 49.31, 8438.79, null, 9.05, null, null, 871.20,
+ checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 13, 50.00, null, 0.98622162, 49.31, 8438.79, null, 9.05, null, null, 871.21,
null);
- checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 14, 50.00, null, 0.98516964, 49.26, 8397.80, null, 9.01, null, null, 862.19,
+ checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 14, 50.00, null, 0.98516964, 49.26, 8397.80, null, 9.01, null, null, 862.20,
null);
- checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 15, 50.00, null, 0.98411879, 49.21, 8356.77, null, 8.97, null, null, 853.22,
+ checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 15, 50.00, null, 0.98411879, 49.21, 8356.77, null, 8.97, null, null, 853.23,
null);
- checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 16, 50.00, null, 0.98306905, 49.15, 8315.70, null, 8.92, null, null, 844.30,
+ checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 16, 50.00, null, 0.98306905, 49.15, 8315.70, null, 8.93, null, null, 844.30,
null);
checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 17, 50.00, null, 0.98202044, 49.10, 8274.58, null, 8.88, null, null, 835.42,
null);
- checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 18, 50.00, null, 0.98097294, 49.05, 8233.41, null, 8.84, null, null, 826.58,
+ checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 18, 50.00, null, 0.98097294, 49.05, 8233.41, null, 8.83, null, null, 826.59,
null);
- checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 19, 50.00, null, 0.97992656, 49.00, 8192.20, null, 8.79, null, null, 817.79,
+ checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 19, 50.00, null, 0.97992656, 49.00, 8192.20, null, 8.79, null, null, 817.80,
null);
- checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 20, 50.00, null, 0.97888129, 48.94, 8150.95, null, 8.75, null, null, 809.04,
+ checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 20, 50.00, null, 0.97888129, 48.94, 8150.95, null, 8.75, null, null, 809.05,
null);
- checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 21, 50.00, null, 0.97783715, 48.89, 8109.65, null, 8.70, null, null, 800.34,
+ checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 21, 50.00, null, 0.97783715, 48.89, 8109.65, null, 8.70, null, null, 800.35,
null);
- checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 22, 50.00, null, 0.97679411, 48.84, 8068.31, null, 8.66, null, null, 791.68,
+ checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 22, 50.00, null, 0.97679411, 48.84, 8068.31, null, 8.66, null, null, 791.69,
null);
- checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 23, 50.00, null, 0.97575219, 48.79, 8026.93, null, 8.62, null, null, 783.06,
+ checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 23, 50.00, null, 0.97575219, 48.79, 8026.93, null, 8.62, null, null, 783.07,
null);
- checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 24, 50.00, null, 0.97471138, 48.74, 7985.50, null, 8.57, null, null, 774.49,
+ checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 24, 50.00, null, 0.97471138, 48.74, 7985.50, null, 8.57, null, null, 774.50,
null);
- checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 25, 50.00, null, 0.97367168, 48.68, 7944.03, null, 8.53, null, null, 765.96,
+ checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 25, 50.00, null, 0.97367168, 48.68, 7944.03, null, 8.53, null, null, 765.97,
null);
- checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 26, 50.00, null, 0.97263309, 48.63, 7902.51, null, 8.48, null, null, 757.48,
+ checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 26, 50.00, null, 0.97263309, 48.63, 7902.51, null, 8.48, null, null, 757.49,
null);
- checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 27, 50.00, null, 0.97159560, 48.58, 7860.95, null, 8.44, null, null, 749.04,
+ checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 27, 50.00, null, 0.97159560, 48.58, 7860.95, null, 8.44, null, null, 749.05,
null);
- checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 28, 50.00, null, 0.97055922, 48.53, 7819.34, null, 8.39, null, null, 740.65,
+ checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 28, 50.00, null, 0.97055922, 48.53, 7819.34, null, 8.39, null, null, 740.66,
null);
- checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 29, 50.00, null, 0.96952395, 48.48, 7777.69, null, 8.35, null, null, 732.30,
+ checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 29, 50.00, null, 0.96952395, 48.48, 7777.69, null, 8.35, null, null, 732.31,
null);
- checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 30, 50.00, null, 0.96848979, 48.42, 7736.00, null, 8.31, null, null, 723.99,
+ checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 30, 50.00, null, 0.96848979, 48.42, 7736.00, null, 8.31, null, null, 724.00,
null);
- checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 31, 50.00, null, 0.96745672, 48.37, 7694.26, null, 8.26, null, null, 715.73,
+ checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 31, 50.00, null, 0.96745672, 48.37, 7694.26, null, 8.26, null, null, 715.74,
null);
- checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 32, 50.00, null, 0.96642476, 48.32, 7652.47, null, 8.22, null, null, 707.51,
+ checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 32, 50.00, null, 0.96642476, 48.32, 7652.47, null, 8.21, null, null, 707.53,
null);
- checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 33, 50.00, null, 0.96539390, 48.27, 7610.65, null, 8.17, null, null, 699.34,
+ checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 33, 50.00, null, 0.96539390, 48.27, 7610.65, null, 8.18, null, null, 699.35,
null);
- checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 34, 50.00, null, 0.96436413, 48.22, 7568.77, null, 8.13, null, null, 691.21,
+ checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 34, 50.00, null, 0.96436413, 48.22, 7568.77, null, 8.12, null, null, 691.23,
null);
- checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 35, 50.00, null, 0.96333547, 48.17, 7526.85, null, 8.08, null, null, 683.13,
+ checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 35, 50.00, null, 0.96333547, 48.17, 7526.85, null, 8.08, null, null, 683.15,
null);
- checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 36, 50.00, null, 0.96230790, 48.12, 7484.89, null, 8.04, null, null, 675.09,
+ checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 36, 50.00, null, 0.96230790, 48.12, 7484.89, null, 8.04, null, null, 675.11,
null);
- checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 37, 50.00, null, 0.96128143, 48.06, 7442.88, null, 7.99, null, null, 667.10,
+ checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 37, 50.00, null, 0.96128143, 48.06, 7442.88, null, 7.99, null, null, 667.12,
null);
- checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 38, 50.00, null, 0.96025606, 48.01, 7400.83, null, 7.95, null, null, 659.15,
+ checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 38, 50.00, null, 0.96025606, 48.01, 7400.83, null, 7.95, null, null, 659.17,
null);
- checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 39, 50.00, null, 0.95923178, 47.96, 7358.73, null, 7.90, null, null, 651.25,
+ checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 39, 50.00, null, 0.95923178, 47.96, 7358.73, null, 7.90, null, null, 651.27,
null);
- checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 40, 50.00, null, 0.95820859, 47.91, 7316.59, null, 7.86, null, null, 643.39,
+ checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 40, 50.00, null, 0.95820859, 47.91, 7316.59, null, 7.86, null, null, 643.41,
null);
- checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 41, 50.00, null, 0.95718649, 47.86, 7274.41, null, 7.81, null, null, 635.58,
+ checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 41, 50.00, null, 0.95718649, 47.86, 7274.41, null, 7.82, null, null, 635.59,
null);
- checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 42, 50.00, null, 0.95616548, 47.81, 7232.17, null, 7.77, null, null, 627.81,
+ checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 42, 50.00, null, 0.95616548, 47.81, 7232.17, null, 7.76, null, null, 627.83,
null);
- checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 43, 50.00, null, 0.95514557, 47.76, 7189.90, null, 7.72, null, null, 620.09,
+ checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 43, 50.00, null, 0.95514557, 47.76, 7189.90, null, 7.73, null, null, 620.10,
null);
- checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 44, 50.00, null, 0.95412674, 47.71, 7147.57, null, 7.68, null, null, 612.41,
+ checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 44, 50.00, null, 0.95412674, 47.71, 7147.57, null, 7.67, null, null, 612.43,
null);
- checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 45, 50.00, null, 0.95310899, 47.66, 7105.21, null, 7.63, null, null, 604.78,
+ checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 45, 50.00, null, 0.95310899, 47.66, 7105.21, null, 7.64, null, null, 604.79,
null);
- checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 46, 50.00, null, 0.95209233, 47.60, 7062.79, null, 7.59, null, null, 597.19,
+ checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 46, 50.00, null, 0.95209233, 47.60, 7062.79, null, 7.58, null, null, 597.21,
null);
- checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 47, 50.00, null, 0.95107676, 47.55, 7020.33, null, 7.54, null, null, 589.65,
+ checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 47, 50.00, null, 0.95107676, 47.55, 7020.33, null, 7.54, null, null, 589.67,
null);
- checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 48, 50.00, null, 0.95006227, 47.50, 6977.83, null, 7.50, null, null, 582.15,
+ checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 48, 50.00, null, 0.95006227, 47.50, 6977.83, null, 7.50, null, null, 582.17,
null);
- checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 49, 50.00, null, 0.94904886, 47.45, 6935.28, null, 7.45, null, null, 574.70,
+ checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 49, 50.00, null, 0.94904886, 47.45, 6935.28, null, 7.45, null, null, 574.72,
null);
- checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 50, 50.00, null, 0.94803653, 47.40, 6892.69, null, 7.41, null, null, 567.29,
+ checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 50, 50.00, null, 0.94803653, 47.40, 6892.69, null, 7.41, null, null, 567.31,
null);
- checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 51, 50.00, null, 0.94702529, 47.35, 6850.05, null, 7.36, null, null, 559.93,
+ checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 51, 50.00, null, 0.94702529, 47.35, 6850.05, null, 7.36, null, null, 559.95,
null);
- checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 52, 50.00, null, 0.94601512, 47.30, 6807.36, null, 7.31, null, null, 552.62,
+ checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 52, 50.00, null, 0.94601512, 47.30, 6807.36, null, 7.31, null, null, 552.64,
null);
- checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 53, 50.00, null, 0.94500603, 47.25, 6764.63, null, 7.27, null, null, 545.35,
+ checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 53, 50.00, null, 0.94500603, 47.25, 6764.63, null, 7.27, null, null, 545.37,
null);
- checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 54, 50.00, null, 0.94399801, 47.20, 6721.85, null, 7.22, null, null, 538.13,
+ checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 54, 50.00, null, 0.94399801, 47.20, 6721.85, null, 7.22, null, null, 538.15,
null);
- checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 55, 50.00, null, 0.94299107, 47.15, 6679.03, null, 7.18, null, null, 530.95,
+ checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 55, 50.00, null, 0.94299107, 47.15, 6679.03, null, 7.18, null, null, 530.97,
null);
- checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 56, 50.00, null, 0.94198521, 47.10, 6636.16, null, 7.13, null, null, 523.82,
+ checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 56, 50.00, null, 0.94198521, 47.10, 6636.16, null, 7.13, null, null, 523.84,
null);
- checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 57, 50.00, null, 0.94098042, 47.05, 6593.25, null, 7.09, null, null, 516.73,
+ checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 57, 50.00, null, 0.94098042, 47.05, 6593.25, null, 7.09, null, null, 516.75,
null);
- checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 58, 50.00, null, 0.93997669, 47.00, 6550.29, null, 7.04, null, null, 509.69,
+ checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 58, 50.00, null, 0.93997669, 47.00, 6550.29, null, 7.04, null, null, 509.71,
null);
- checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 59, 50.00, null, 0.93897404, 46.95, 6507.28, null, 6.99, null, null, 502.70,
+ checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 59, 50.00, null, 0.93897404, 46.95, 6507.28, null, 6.99, null, null, 502.72,
null);
- checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 60, 50.00, null, 0.93797246, 46.90, 6464.23, null, 6.95, null, null, 495.75,
+ checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 60, 50.00, null, 0.93797246, 46.90, 6464.23, null, 6.95, null, null, 495.77,
null);
- checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 61, 50.00, null, 0.93697195, 46.85, 6421.14, null, 6.90, null, null, 488.85,
+ checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 61, 50.00, null, 0.93697195, 46.85, 6421.14, null, 6.91, null, null, 488.86,
null);
- checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 62, 50.00, null, 0.93597251, 46.80, 6377.99, null, 6.86, null, null, 481.99,
+ checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 62, 50.00, null, 0.93597251, 46.80, 6377.99, null, 6.85, null, null, 482.01,
null);
- checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 63, 50.00, null, 0.93497413, 46.75, 6334.80, null, 6.81, null, null, 475.18,
+ checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 63, 50.00, null, 0.93497413, 46.75, 6334.80, null, 6.81, null, null, 475.20,
null);
- checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 64, 50.00, null, 0.93397681, 46.70, 6291.57, null, 6.76, null, null, 468.42,
+ checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 64, 50.00, null, 0.93397681, 46.70, 6291.57, null, 6.77, null, null, 468.43,
null);
- checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 65, 50.00, null, 0.93298056, 46.65, 6248.29, null, 6.72, null, null, 461.70,
+ checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 65, 50.00, null, 0.93298056, 46.65, 6248.29, null, 6.72, null, null, 461.71,
null);
- checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 66, 50.00, null, 0.93198538, 46.60, 6204.96, null, 6.67, null, null, 455.03,
+ checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 66, 50.00, null, 0.93198538, 46.60, 6204.96, null, 6.67, null, null, 455.04,
null);
- checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 67, 50.00, null, 0.93099125, 46.55, 6161.58, null, 6.63, null, null, 448.40,
+ checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 67, 50.00, null, 0.93099125, 46.55, 6161.58, null, 6.62, null, null, 448.42,
null);
- checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 68, 50.00, null, 0.92999818, 46.50, 6118.16, null, 6.58, null, null, 441.82,
+ checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 68, 50.00, null, 0.92999818, 46.50, 6118.16, null, 6.58, null, null, 441.84,
null);
- checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 69, 50.00, null, 0.92900618, 46.45, 6074.70, null, 6.53, null, null, 435.29,
+ checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 69, 50.00, null, 0.92900618, 46.45, 6074.70, null, 6.54, null, null, 435.30,
null);
- checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 70, 50.00, null, 0.92801523, 46.40, 6031.18, null, 6.49, null, null, 428.80,
+ checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 70, 50.00, null, 0.92801523, 46.40, 6031.18, null, 6.48, null, null, 428.82,
null);
- checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 71, 50.00, null, 0.92702534, 46.35, 5987.62, null, 6.44, null, null, 422.36,
+ checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 71, 50.00, null, 0.92702534, 46.35, 5987.62, null, 6.44, null, null, 422.38,
null);
- checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 72, 50.00, null, 0.92603650, 46.30, 5944.02, null, 6.39, null, null, 415.97,
+ checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 72, 50.00, null, 0.92603650, 46.30, 5944.02, null, 6.40, null, null, 415.98,
null);
- checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 73, 50.00, null, 0.92504872, 46.25, 5900.36, null, 6.35, null, null, 409.62,
+ checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 73, 50.00, null, 0.92504872, 46.25, 5900.36, null, 6.34, null, null, 409.64,
null);
- checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 74, 50.00, null, 0.92406200, 46.20, 5856.66, null, 6.30, null, null, 403.32,
+ checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 74, 50.00, null, 0.92406200, 46.20, 5856.66, null, 6.30, null, null, 403.34,
null);
- checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 75, 50.00, null, 0.92307632, 46.15, 5812.92, null, 6.25, null, null, 397.07,
+ checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 75, 50.00, null, 0.92307632, 46.15, 5812.92, null, 6.26, null, null, 397.08,
null);
- checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 76, 50.00, null, 0.92209170, 46.10, 5769.12, null, 6.21, null, null, 390.86,
+ checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 76, 50.00, null, 0.92209170, 46.10, 5769.12, null, 6.20, null, null, 390.88,
null);
- checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 77, 50.00, null, 0.92110813, 46.06, 5725.29, null, 6.16, null, null, 384.70,
+ checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 77, 50.00, null, 0.92110813, 46.06, 5725.29, null, 6.17, null, null, 384.71,
null);
- checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 78, 50.00, null, 0.92012560, 46.01, 5681.40, null, 6.11, null, null, 378.59,
+ checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 78, 50.00, null, 0.92012560, 46.01, 5681.40, null, 6.11, null, null, 378.60,
null);
- checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 79, 50.00, null, 0.91914413, 45.96, 5637.47, null, 6.07, null, null, 372.52,
+ checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 79, 50.00, null, 0.91914413, 45.96, 5637.47, null, 6.07, null, null, 372.53,
null);
- checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 80, 50.00, null, 0.91816370, 45.91, 5593.49, null, 6.02, null, null, 366.50,
+ checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 80, 50.00, null, 0.91816370, 45.91, 5593.49, null, 6.02, null, null, 366.51,
null);
- checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 81, 50.00, null, 0.91718432, 45.86, 5549.46, null, 5.97, null, null, 360.53,
+ checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 81, 50.00, null, 0.91718432, 45.86, 5549.46, null, 5.97, null, null, 360.54,
null);
- checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 82, 50.00, null, 0.91620598, 45.81, 5505.38, null, 5.93, null, null, 354.60,
+ checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 82, 50.00, null, 0.91620598, 45.81, 5505.38, null, 5.92, null, null, 354.62,
null);
- checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 83, 50.00, null, 0.91522868, 45.76, 5461.26, null, 5.88, null, null, 348.72,
+ checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 83, 50.00, null, 0.91522868, 45.76, 5461.26, null, 5.88, null, null, 348.74,
null);
- checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 84, 50.00, null, 0.91425243, 45.71, 5417.09, null, 5.83, null, null, 342.89,
+ checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 84, 50.00, null, 0.91425243, 45.71, 5417.09, null, 5.83, null, null, 342.91,
null);
- checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 85, 50.00, null, 0.91327722, 45.66, 5372.88, null, 5.78, null, null, 337.11,
+ checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 85, 50.00, null, 0.91327722, 45.66, 5372.88, null, 5.79, null, null, 337.12,
null);
- checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 86, 50.00, null, 0.91230305, 45.62, 5328.62, null, 5.74, null, null, 331.37,
+ checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 86, 50.00, null, 0.91230305, 45.62, 5328.62, null, 5.74, null, null, 331.38,
null);
- checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 87, 50.00, null, 0.91132992, 45.57, 5284.31, null, 5.69, null, null, 325.68,
+ checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 87, 50.00, null, 0.91132992, 45.57, 5284.31, null, 5.69, null, null, 325.69,
null);
- checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 88, 50.00, null, 0.91035783, 45.52, 5239.95, null, 5.64, null, null, 320.04,
+ checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 88, 50.00, null, 0.91035783, 45.52, 5239.95, null, 5.64, null, null, 320.05,
null);
- checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 89, 50.00, null, 0.90938677, 45.47, 5195.54, null, 5.60, null, null, 314.44,
+ checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 89, 50.00, null, 0.90938677, 45.47, 5195.54, null, 5.59, null, null, 314.46,
null);
- checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 90, 50.00, null, 0.90841675, 45.42, 5151.09, null, 5.55, null, null, 308.89,
+ checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 90, 50.00, null, 0.90841675, 45.42, 5151.09, null, 5.55, null, null, 308.91,
null);
- checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 91, 50.00, null, 0.90744776, 45.37, 5106.59, null, 5.50, null, null, 303.39,
+ checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 91, 50.00, null, 0.90744776, 45.37, 5106.59, null, 5.50, null, null, 303.41,
null);
- checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 92, 50.00, null, 0.90647981, 45.32, 5062.05, null, 5.45, null, null, 297.94,
+ checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 92, 50.00, null, 0.90647981, 45.32, 5062.05, null, 5.46, null, null, 297.95,
null);
- checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 93, 50.00, null, 0.90551289, 45.28, 5017.45, null, 5.41, null, null, 292.53,
+ checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 93, 50.00, null, 0.90551289, 45.28, 5017.45, null, 5.40, null, null, 292.55,
null);
- checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 94, 50.00, null, 0.90454700, 45.23, 4972.81, null, 5.36, null, null, 287.17,
+ checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 94, 50.00, null, 0.90454700, 45.23, 4972.81, null, 5.36, null, null, 287.19,
null);
- checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 95, 50.00, null, 0.90358215, 45.18, 4928.12, null, 5.31, null, null, 281.86,
+ checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 95, 50.00, null, 0.90358215, 45.18, 4928.12, null, 5.31, null, null, 281.88,
null);
- checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 96, 50.00, null, 0.90261832, 45.13, 4883.38, null, 5.26, null, null, 276.60,
+ checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 96, 50.00, null, 0.90261832, 45.13, 4883.38, null, 5.26, null, null, 276.62,
null);
- checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 97, 50.00, null, 0.90165552, 45.08, 4838.59, null, 5.21, null, null, 271.39,
+ checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 97, 50.00, null, 0.90165552, 45.08, 4838.59, null, 5.21, null, null, 271.41,
null);
- checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 98, 50.00, null, 0.90069374, 45.03, 4793.76, null, 5.17, null, null, 266.22,
+ checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 98, 50.00, null, 0.90069374, 45.03, 4793.76, null, 5.17, null, null, 266.24,
null);
- checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 99, 50.00, null, 0.89973299, 44.99, 4748.88, null, 5.12, null, null, 261.10,
+ checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 99, 50.00, null, 0.89973299, 44.99, 4748.88, null, 5.12, null, null, 261.12,
null);
- checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 100, 50.00, null, 0.89877327, 44.94, 4703.95, null, 5.07, null, null, 256.03,
+ checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 100, 50.00, null, 0.89877327, 44.94, 4703.95, null, 5.07, null, null, 256.05,
null);
- checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 101, 50.00, null, 0.89781457, 44.89, 4658.97, null, 5.02, null, null, 251.01,
+ checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 101, 50.00, null, 0.89781457, 44.89, 4658.97, null, 5.02, null, null, 251.03,
null);
- checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 102, 50.00, null, 0.89685689, 44.84, 4613.95, null, 4.97, null, null, 246.04,
+ checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 102, 50.00, null, 0.89685689, 44.84, 4613.95, null, 4.98, null, null, 246.05,
null);
- checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 103, 50.00, null, 0.89590024, 44.80, 4568.88, null, 4.93, null, null, 241.11,
+ checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 103, 50.00, null, 0.89590024, 44.80, 4568.88, null, 4.93, null, null, 241.12,
null);
- checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 104, 50.00, null, 0.89494460, 44.75, 4523.75, null, 4.88, null, null, 236.23,
+ checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 104, 50.00, null, 0.89494460, 44.75, 4523.75, null, 4.87, null, null, 236.25,
null);
- checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 105, 50.00, null, 0.89398999, 44.70, 4478.59, null, 4.83, null, null, 231.40,
+ checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 105, 50.00, null, 0.89398999, 44.70, 4478.59, null, 4.84, null, null, 231.41,
null);
- checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 106, 50.00, null, 0.89303639, 44.65, 4433.37, null, 4.78, null, null, 226.62,
+ checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 106, 50.00, null, 0.89303639, 44.65, 4433.37, null, 4.78, null, null, 226.63,
null);
- checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 107, 50.00, null, 0.89208381, 44.60, 4388.10, null, 4.73, null, null, 221.89,
+ checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 107, 50.00, null, 0.89208381, 44.60, 4388.10, null, 4.73, null, null, 221.90,
null);
- checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 108, 50.00, null, 0.89113225, 44.56, 4342.79, null, 4.69, null, null, 217.20,
+ checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 108, 50.00, null, 0.89113225, 44.56, 4342.79, null, 4.69, null, null, 217.21,
null);
- checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 109, 50.00, null, 0.89018170, 44.51, 4297.42, null, 4.64, null, null, 212.56,
+ checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 109, 50.00, null, 0.89018170, 44.51, 4297.42, null, 4.63, null, null, 212.58,
null);
- checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 110, 50.00, null, 0.88923216, 44.46, 4252.01, null, 4.59, null, null, 207.97,
+ checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 110, 50.00, null, 0.88923216, 44.46, 4252.01, null, 4.59, null, null, 207.99,
null);
- checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 111, 50.00, null, 0.88828364, 44.41, 4206.55, null, 4.54, null, null, 203.43,
+ checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 111, 50.00, null, 0.88828364, 44.41, 4206.55, null, 4.54, null, null, 203.45,
null);
- checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 112, 50.00, null, 0.88733613, 44.37, 4161.05, null, 4.49, null, null, 198.94,
+ checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 112, 50.00, null, 0.88733613, 44.37, 4161.05, null, 4.50, null, null, 198.95,
null);
- checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 113, 50.00, null, 0.88638963, 44.32, 4115.49, null, 4.44, null, null, 194.50,
+ checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 113, 50.00, null, 0.88638963, 44.32, 4115.49, null, 4.44, null, null, 194.51,
null);
- checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 114, 50.00, null, 0.88544414, 44.27, 4069.88, null, 4.39, null, null, 190.11,
+ checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 114, 50.00, null, 0.88544414, 44.27, 4069.88, null, 4.39, null, null, 190.12,
null);
- checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 115, 50.00, null, 0.88449966, 44.22, 4024.23, null, 4.35, null, null, 185.76,
+ checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 115, 50.00, null, 0.88449966, 44.22, 4024.23, null, 4.35, null, null, 185.77,
null);
- checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 116, 50.00, null, 0.88355619, 44.18, 3978.53, null, 4.30, null, null, 181.46,
+ checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 116, 50.00, null, 0.88355619, 44.18, 3978.53, null, 4.30, null, null, 181.47,
null);
- checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 117, 50.00, null, 0.88261372, 44.13, 3932.77, null, 4.25, null, null, 177.21,
+ checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 117, 50.00, null, 0.88261372, 44.13, 3932.77, null, 4.24, null, null, 177.23,
null);
- checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 118, 50.00, null, 0.88167226, 44.08, 3886.97, null, 4.20, null, null, 173.01,
+ checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 118, 50.00, null, 0.88167226, 44.08, 3886.97, null, 4.20, null, null, 173.03,
null);
- checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 119, 50.00, null, 0.88073180, 44.04, 3841.12, null, 4.15, null, null, 168.86,
+ checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 119, 50.00, null, 0.88073180, 44.04, 3841.12, null, 4.15, null, null, 168.88,
null);
- checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 120, 50.00, null, 0.87979234, 43.99, 3795.23, null, 4.10, null, null, 164.76,
+ checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 120, 50.00, null, 0.87979234, 43.99, 3795.23, null, 4.11, null, null, 164.77,
null);
- checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 121, 50.00, null, 0.87885389, 43.94, 3749.28, null, 4.05, null, null, 160.71,
+ checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 121, 50.00, null, 0.87885389, 43.94, 3749.28, null, 4.05, null, null, 160.72,
null);
- checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 122, 50.00, null, 0.87791644, 43.90, 3703.28, null, 4.00, null, null, 156.71,
+ checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 122, 50.00, null, 0.87791644, 43.90, 3703.28, null, 4.00, null, null, 156.72,
null);
- checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 123, 50.00, null, 0.87697999, 43.85, 3657.24, null, 3.95, null, null, 152.76,
+ checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 123, 50.00, null, 0.87697999, 43.85, 3657.24, null, 3.96, null, null, 152.76,
null);
- checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 124, 50.00, null, 0.87604453, 43.80, 3611.14, null, 3.91, null, null, 148.85,
+ checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 124, 50.00, null, 0.87604453, 43.80, 3611.14, null, 3.90, null, null, 148.86,
null);
- checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 125, 50.00, null, 0.87511008, 43.76, 3565.00, null, 3.86, null, null, 144.99,
+ checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 125, 50.00, null, 0.87511008, 43.76, 3565.00, null, 3.86, null, null, 145.00,
null);
- checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 126, 50.00, null, 0.87417662, 43.71, 3518.81, null, 3.81, null, null, 141.18,
+ checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 126, 50.00, null, 0.87417662, 43.71, 3518.81, null, 3.81, null, null, 141.19,
null);
- checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 127, 50.00, null, 0.87324416, 43.66, 3472.56, null, 3.76, null, null, 137.42,
+ checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 127, 50.00, null, 0.87324416, 43.66, 3472.56, null, 3.75, null, null, 137.44,
null);
- checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 128, 50.00, null, 0.87231269, 43.62, 3426.27, null, 3.71, null, null, 133.71,
+ checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 128, 50.00, null, 0.87231269, 43.62, 3426.27, null, 3.71, null, null, 133.73,
null);
- checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 129, 50.00, null, 0.87138221, 43.57, 3379.93, null, 3.66, null, null, 130.05,
+ checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 129, 50.00, null, 0.87138221, 43.57, 3379.93, null, 3.66, null, null, 130.07,
null);
- checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 130, 50.00, null, 0.87045273, 43.52, 3333.54, null, 3.61, null, null, 126.44,
+ checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 130, 50.00, null, 0.87045273, 43.52, 3333.54, null, 3.61, null, null, 126.46,
null);
- checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 131, 50.00, null, 0.86952424, 43.48, 3287.10, null, 3.56, null, null, 122.88,
+ checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 131, 50.00, null, 0.86952424, 43.48, 3287.10, null, 3.56, null, null, 122.90,
null);
- checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 132, 50.00, null, 0.86859674, 43.43, 3240.61, null, 3.51, null, null, 119.37,
+ checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 132, 50.00, null, 0.86859674, 43.43, 3240.61, null, 3.51, null, null, 119.39,
null);
- checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 133, 50.00, null, 0.86767023, 43.38, 3194.07, null, 3.46, null, null, 115.91,
+ checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 133, 50.00, null, 0.86767023, 43.38, 3194.07, null, 3.46, null, null, 115.93,
null);
- checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 134, 50.00, null, 0.86674471, 43.34, 3147.48, null, 3.41, null, null, 112.50,
+ checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 134, 50.00, null, 0.86674471, 43.34, 3147.48, null, 3.41, null, null, 112.52,
null);
- checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 135, 50.00, null, 0.86582017, 43.29, 3100.84, null, 3.36, null, null, 109.14,
+ checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 135, 50.00, null, 0.86582017, 43.29, 3100.84, null, 3.36, null, null, 109.16,
null);
- checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 136, 50.00, null, 0.86489662, 43.24, 3054.15, null, 3.31, null, null, 105.83,
+ checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 136, 50.00, null, 0.86489662, 43.24, 3054.15, null, 3.31, null, null, 105.85,
null);
- checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 137, 50.00, null, 0.86397406, 43.20, 3007.41, null, 3.26, null, null, 102.57,
+ checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 137, 50.00, null, 0.86397406, 43.20, 3007.41, null, 3.26, null, null, 102.59,
null);
- checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 138, 50.00, null, 0.86305248, 43.15, 2960.62, null, 3.21, null, null, 99.36,
+ checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 138, 50.00, null, 0.86305248, 43.15, 2960.62, null, 3.21, null, null, 99.38,
null);
- checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 139, 50.00, null, 0.86213188, 43.11, 2913.79, null, 3.16, null, null, 96.20,
+ checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 139, 50.00, null, 0.86213188, 43.11, 2913.79, null, 3.17, null, null, 96.21,
null);
- checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 140, 50.00, null, 0.86121227, 43.06, 2866.90, null, 3.11, null, null, 93.09,
+ checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 140, 50.00, null, 0.86121227, 43.06, 2866.90, null, 3.11, null, null, 93.10,
null);
- checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 141, 50.00, null, 0.86029363, 43.01, 2819.96, null, 3.06, null, null, 90.03,
+ checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 141, 50.00, null, 0.86029363, 43.01, 2819.96, null, 3.06, null, null, 90.04,
null);
- checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 142, 50.00, null, 0.85937598, 42.97, 2772.97, null, 3.01, null, null, 87.02,
+ checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 142, 50.00, null, 0.85937598, 42.97, 2772.97, null, 3.01, null, null, 87.03,
null);
- checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 143, 50.00, null, 0.85845930, 42.92, 2725.93, null, 2.96, null, null, 84.06,
+ checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 143, 50.00, null, 0.85845930, 42.92, 2725.93, null, 2.96, null, null, 84.07,
null);
- checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 144, 50.00, null, 0.85754361, 42.88, 2678.84, null, 2.91, null, null, 81.15,
+ checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 144, 50.00, null, 0.85754361, 42.88, 2678.84, null, 2.91, null, null, 81.16,
null);
- checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 145, 50.00, null, 0.85662889, 42.83, 2631.70, null, 2.86, null, null, 78.29,
+ checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 145, 50.00, null, 0.85662889, 42.83, 2631.70, null, 2.86, null, null, 78.30,
null);
- checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 146, 50.00, null, 0.85571514, 42.79, 2584.51, null, 2.81, null, null, 75.48,
+ checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 146, 50.00, null, 0.85571514, 42.79, 2584.51, null, 2.81, null, null, 75.49,
null);
- checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 147, 50.00, null, 0.85480237, 42.74, 2537.27, null, 2.76, null, null, 72.72,
+ checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 147, 50.00, null, 0.85480237, 42.74, 2537.27, null, 2.76, null, null, 72.73,
null);
- checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 148, 50.00, null, 0.85389057, 42.69, 2489.98, null, 2.71, null, null, 70.01,
+ checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 148, 50.00, null, 0.85389057, 42.69, 2489.98, null, 2.71, null, null, 70.02,
null);
- checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 149, 50.00, null, 0.85297975, 42.65, 2442.64, null, 2.66, null, null, 67.35,
+ checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 149, 50.00, null, 0.85297975, 42.65, 2442.64, null, 2.66, null, null, 67.36,
null);
- checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 150, 50.00, null, 0.85206990, 42.60, 2395.25, null, 2.61, null, null, 64.74,
+ checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 150, 50.00, null, 0.85206990, 42.60, 2395.25, null, 2.61, null, null, 64.75,
null);
- checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 151, 50.00, null, 0.85116101, 42.56, 2347.81, null, 2.56, null, null, 62.18,
+ checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 151, 50.00, null, 0.85116101, 42.56, 2347.81, null, 2.56, null, null, 62.19,
null);
- checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 152, 50.00, null, 0.85025310, 42.51, 2300.31, null, 2.51, null, null, 59.67,
+ checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 152, 50.00, null, 0.85025310, 42.51, 2300.31, null, 2.50, null, null, 59.69,
null);
- checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 153, 50.00, null, 0.84934616, 42.47, 2252.77, null, 2.46, null, null, 57.21,
+ checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 153, 50.00, null, 0.84934616, 42.47, 2252.77, null, 2.46, null, null, 57.23,
null);
- checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 154, 50.00, null, 0.84844018, 42.42, 2205.17, null, 2.41, null, null, 54.80,
+ checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 154, 50.00, null, 0.84844018, 42.42, 2205.17, null, 2.40, null, null, 54.83,
null);
- checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 155, 50.00, null, 0.84753517, 42.38, 2157.53, null, 2.35, null, null, 52.45,
+ checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 155, 50.00, null, 0.84753517, 42.38, 2157.53, null, 2.36, null, null, 52.47,
null);
- checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 156, 50.00, null, 0.84663113, 42.33, 2109.83, null, 2.30, null, null, 50.15,
+ checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 156, 50.00, null, 0.84663113, 42.33, 2109.83, null, 2.30, null, null, 50.17,
null);
- checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 157, 50.00, null, 0.84572805, 42.29, 2062.09, null, 2.25, null, null, 47.90,
+ checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 157, 50.00, null, 0.84572805, 42.29, 2062.09, null, 2.26, null, null, 47.91,
null);
- checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 158, 50.00, null, 0.84482593, 42.24, 2014.29, null, 2.20, null, null, 45.70,
+ checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 158, 50.00, null, 0.84482593, 42.24, 2014.29, null, 2.20, null, null, 45.71,
null);
- checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 159, 50.00, null, 0.84392477, 42.20, 1966.44, null, 2.15, null, null, 43.55,
+ checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 159, 50.00, null, 0.84392477, 42.20, 1966.44, null, 2.15, null, null, 43.56,
null);
- checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 160, 50.00, null, 0.84302458, 42.15, 1918.54, null, 2.10, null, null, 41.45,
+ checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 160, 50.00, null, 0.84302458, 42.15, 1918.54, null, 2.10, null, null, 41.46,
null);
- checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 161, 50.00, null, 0.84212535, 42.11, 1870.59, null, 2.05, null, null, 39.40,
+ checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 161, 50.00, null, 0.84212535, 42.11, 1870.59, null, 2.05, null, null, 39.41,
null);
- checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 162, 50.00, null, 0.84122707, 42.06, 1822.58, null, 2.00, null, null, 37.40,
+ checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 162, 50.00, null, 0.84122707, 42.06, 1822.58, null, 1.99, null, null, 37.42,
null);
- checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 163, 50.00, null, 0.84032975, 42.02, 1774.53, null, 1.95, null, null, 35.45,
+ checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 163, 50.00, null, 0.84032975, 42.02, 1774.53, null, 1.95, null, null, 35.47,
null);
- checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 164, 50.00, null, 0.83943340, 41.97, 1726.43, null, 1.89, null, null, 33.56,
+ checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 164, 50.00, null, 0.83943340, 41.97, 1726.43, null, 1.90, null, null, 33.57,
null);
- checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 165, 50.00, null, 0.83853799, 41.93, 1678.27, null, 1.84, null, null, 31.72,
+ checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 165, 50.00, null, 0.83853799, 41.93, 1678.27, null, 1.84, null, null, 31.73,
null);
- checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 166, 50.00, null, 0.83764354, 41.88, 1630.06, null, 1.79, null, null, 29.93,
+ checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 166, 50.00, null, 0.83764354, 41.88, 1630.06, null, 1.79, null, null, 29.94,
null);
- checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 167, 50.00, null, 0.83675005, 41.84, 1581.80, null, 1.74, null, null, 28.19,
+ checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 167, 50.00, null, 0.83675005, 41.84, 1581.80, null, 1.74, null, null, 28.20,
null);
- checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 168, 50.00, null, 0.83585751, 41.79, 1533.49, null, 1.69, null, null, 26.50,
+ checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 168, 50.00, null, 0.83585751, 41.79, 1533.49, null, 1.69, null, null, 26.51,
null);
- checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 169, 50.00, null, 0.83496592, 41.75, 1485.13, null, 1.64, null, null, 24.86,
+ checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 169, 50.00, null, 0.83496592, 41.75, 1485.13, null, 1.64, null, null, 24.87,
null);
- checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 170, 50.00, null, 0.83407528, 41.70, 1436.71, null, 1.59, null, null, 23.27,
+ checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 170, 50.00, null, 0.83407528, 41.70, 1436.71, null, 1.58, null, null, 23.29,
null);
- checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 171, 50.00, null, 0.83318560, 41.66, 1388.25, null, 1.53, null, null, 21.74,
+ checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 171, 50.00, null, 0.83318560, 41.66, 1388.25, null, 1.54, null, null, 21.75,
null);
- checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 172, 50.00, null, 0.83229686, 41.61, 1339.73, null, 1.48, null, null, 20.26,
+ checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 172, 50.00, null, 0.83229686, 41.61, 1339.73, null, 1.48, null, null, 20.27,
null);
- checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 173, 50.00, null, 0.83140907, 41.57, 1291.16, null, 1.43, null, null, 18.83,
+ checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 173, 50.00, null, 0.83140907, 41.57, 1291.16, null, 1.43, null, null, 18.84,
null);
- checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 174, 50.00, null, 0.83052222, 41.53, 1242.54, null, 1.38, null, null, 17.45,
+ checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 174, 50.00, null, 0.83052222, 41.53, 1242.54, null, 1.38, null, null, 17.46,
null);
- checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 175, 50.00, null, 0.82963633, 41.48, 1193.87, null, 1.33, null, null, 16.12,
+ checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 175, 50.00, null, 0.82963633, 41.48, 1193.87, null, 1.33, null, null, 16.13,
null);
- checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 176, 50.00, null, 0.82875137, 41.44, 1145.14, null, 1.27, null, null, 14.85,
+ checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 176, 50.00, null, 0.82875137, 41.44, 1145.14, null, 1.27, null, null, 14.86,
null);
- checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 177, 50.00, null, 0.82786736, 41.39, 1096.36, null, 1.22, null, null, 13.63,
+ checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 177, 50.00, null, 0.82786736, 41.39, 1096.36, null, 1.22, null, null, 13.64,
null);
- checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 178, 50.00, null, 0.82698430, 41.35, 1047.54, null, 1.17, null, null, 12.46,
+ checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 178, 50.00, null, 0.82698430, 41.35, 1047.54, null, 1.18, null, null, 12.46,
null);
- checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 179, 50.00, null, 0.82610217, 41.31, 998.65, null, 1.12, null, null, 11.34,
+ checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 179, 50.00, null, 0.82610217, 41.31, 998.65, null, 1.11, null, null, 11.35,
null);
- checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 180, 50.00, null, 0.82522099, 41.26, 949.72, null, 1.07, null, null, 10.27,
+ checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 180, 50.00, null, 0.82522099, 41.26, 949.72, null, 1.07, null, null, 10.28,
null);
- checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 181, 50.00, null, 0.82434075, 41.22, 900.73, null, 1.01, null, null, 9.26,
+ checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 181, 50.00, null, 0.82434075, 41.22, 900.73, null, 1.01, null, null, 9.27,
null);
- checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 182, 50.00, null, 0.82346144, 41.17, 851.70, null, 0.96, null, null, 8.30,
+ checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 182, 50.00, null, 0.82346144, 41.17, 851.70, null, 0.97, null, null, 8.30,
null);
checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 183, 50.00, null, 0.82258308, 41.13, 802.61, null, 0.91, null, null, 7.39,
null);
- checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 184, 50.00, null, 0.82170565, 41.09, 753.46, null, 0.86, null, null, 6.53,
+ checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 184, 50.00, null, 0.82170565, 41.09, 753.46, null, 0.85, null, null, 6.54,
null);
- checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 185, 50.00, null, 0.82082916, 41.04, 704.27, null, 0.80, null, null, 5.73,
+ checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 185, 50.00, null, 0.82082916, 41.04, 704.27, null, 0.81, null, null, 5.73,
null);
checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 186, 50.00, null, 0.81995360, 41.00, 655.02, null, 0.75, null, null, 4.98,
null);
@@ -1743,15 +1743,15 @@ void testLessPayment_term200_discountFee1000_netDisbursement9000_pay40() {
null);
checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 191, 50.00, null, 0.81558979, 40.78, 407.99, null, 0.49, null, null, 2.01,
null);
- checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 192, 50.00, null, 0.81471983, 40.74, 358.42, null, 0.44, null, null, 1.57,
+ checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 192, 50.00, null, 0.81471983, 40.74, 358.42, null, 0.43, null, null, 1.58,
null);
- checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 193, 50.00, null, 0.81385078, 40.69, 308.81, null, 0.38, null, null, 1.19,
+ checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 193, 50.00, null, 0.81385078, 40.69, 308.81, null, 0.39, null, null, 1.19,
null);
checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 194, 50.00, null, 0.81298267, 40.65, 259.14, null, 0.33, null, null, 0.86,
null);
- checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 195, 50.00, null, 0.81211548, 40.61, 209.41, null, 0.28, null, null, 0.58,
+ checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 195, 50.00, null, 0.81211548, 40.61, 209.41, null, 0.27, null, null, 0.59,
null);
- checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 196, 50.00, null, 0.81124922, 40.56, 159.64, null, 0.22, null, null, 0.36,
+ checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 196, 50.00, null, 0.81124922, 40.56, 159.64, null, 0.23, null, null, 0.36,
null);
checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 197, 50.00, null, 0.81038388, 40.52, 109.81, null, 0.17, null, null, 0.19,
null);
@@ -1787,385 +1787,385 @@ void testNoPayment_term200_discountFee1000_netDisbursement9000_pay0_0_50() {
checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 6, 50.00, null, 0.99361699, 49.68, 8716.36, null, 9.35, null, null, 933.64, null);
checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 7, 50.00, null, 0.99255712, 49.63, 8675.67, null, 9.31, null, null, 924.33,
null);
- checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 8, 50.00, null, 0.99149839, 49.57, 8634.94, null, 9.26, null, null, 915.07,
+ checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 8, 50.00, null, 0.99149839, 49.57, 8634.94, null, 9.27, null, null, 915.06,
null);
- checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 9, 50.00, null, 0.99044078, 49.52, 8594.16, null, 9.22, null, null, 905.85,
+ checkInst(model, 12, 12, LocalDate.of(2019, 1, 13), 9, 50.00, null, 0.99044078, 49.52, 8594.16, null, 9.22, null, null, 905.84,
null);
- checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 10, 50.00, null, 0.98938430, 49.47, 8553.33, null, 9.18, null, null, 896.67,
+ checkInst(model, 13, 13, LocalDate.of(2019, 1, 14), 10, 50.00, null, 0.98938430, 49.47, 8553.33, null, 9.17, null, null, 896.67,
null);
- checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 11, 50.00, null, 0.98832895, 49.42, 8512.47, null, 9.13, null, null, 887.54,
+ checkInst(model, 14, 14, LocalDate.of(2019, 1, 15), 11, 50.00, null, 0.98832895, 49.42, 8512.47, null, 9.14, null, null, 887.53,
null);
- checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 12, 50.00, null, 0.98727472, 49.36, 8471.56, null, 9.09, null, null, 878.45,
+ checkInst(model, 15, 15, LocalDate.of(2019, 1, 16), 12, 50.00, null, 0.98727472, 49.36, 8471.56, null, 9.09, null, null, 878.44,
null);
- checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 13, 50.00, null, 0.98622162, 49.31, 8430.60, null, 9.05, null, null, 869.40,
+ checkInst(model, 16, 16, LocalDate.of(2019, 1, 17), 13, 50.00, null, 0.98622162, 49.31, 8430.60, null, 9.04, null, null, 869.40,
null);
- checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 14, 50.00, null, 0.98516964, 49.26, 8389.61, null, 9.00, null, null, 860.40,
+ checkInst(model, 17, 17, LocalDate.of(2019, 1, 18), 14, 50.00, null, 0.98516964, 49.26, 8389.61, null, 9.01, null, null, 860.39,
null);
- checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 15, 50.00, null, 0.98411879, 49.21, 8348.56, null, 8.96, null, null, 851.44,
+ checkInst(model, 18, 18, LocalDate.of(2019, 1, 19), 15, 50.00, null, 0.98411879, 49.21, 8348.56, null, 8.95, null, null, 851.44,
null);
- checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 16, 50.00, null, 0.98306905, 49.15, 8307.48, null, 8.91, null, null, 842.53,
+ checkInst(model, 19, 19, LocalDate.of(2019, 1, 20), 16, 50.00, null, 0.98306905, 49.15, 8307.48, null, 8.92, null, null, 842.52,
null);
- checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 17, 50.00, null, 0.98202044, 49.10, 8266.35, null, 8.87, null, null, 833.66,
+ checkInst(model, 20, 20, LocalDate.of(2019, 1, 21), 17, 50.00, null, 0.98202044, 49.10, 8266.35, null, 8.87, null, null, 833.65,
null);
- checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 18, 50.00, null, 0.98097294, 49.05, 8225.18, null, 8.83, null, null, 824.83,
+ checkInst(model, 21, 21, LocalDate.of(2019, 1, 22), 18, 50.00, null, 0.98097294, 49.05, 8225.18, null, 8.83, null, null, 824.82,
null);
- checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 19, 50.00, null, 0.97992656, 49.00, 8183.96, null, 8.78, null, null, 816.05,
+ checkInst(model, 22, 22, LocalDate.of(2019, 1, 23), 19, 50.00, null, 0.97992656, 49.00, 8183.96, null, 8.78, null, null, 816.04,
null);
- checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 20, 50.00, null, 0.97888129, 48.94, 8142.70, null, 8.74, null, null, 807.31,
+ checkInst(model, 23, 23, LocalDate.of(2019, 1, 24), 20, 50.00, null, 0.97888129, 48.94, 8142.70, null, 8.74, null, null, 807.30,
null);
- checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 21, 50.00, null, 0.97783715, 48.89, 8101.39, null, 8.69, null, null, 798.62,
+ checkInst(model, 24, 24, LocalDate.of(2019, 1, 25), 21, 50.00, null, 0.97783715, 48.89, 8101.39, null, 8.69, null, null, 798.61,
null);
- checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 22, 50.00, null, 0.97679411, 48.84, 8060.04, null, 8.65, null, null, 789.97,
+ checkInst(model, 25, 25, LocalDate.of(2019, 1, 26), 22, 50.00, null, 0.97679411, 48.84, 8060.04, null, 8.65, null, null, 789.96,
null);
- checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 23, 50.00, null, 0.97575219, 48.79, 8018.65, null, 8.61, null, null, 781.36,
+ checkInst(model, 26, 26, LocalDate.of(2019, 1, 27), 23, 50.00, null, 0.97575219, 48.79, 8018.65, null, 8.61, null, null, 781.35,
null);
- checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 24, 50.00, null, 0.97471138, 48.74, 7977.21, null, 8.56, null, null, 772.80,
+ checkInst(model, 27, 27, LocalDate.of(2019, 1, 28), 24, 50.00, null, 0.97471138, 48.74, 7977.21, null, 8.56, null, null, 772.79,
null);
- checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 25, 50.00, null, 0.97367168, 48.68, 7935.73, null, 8.52, null, null, 764.28,
+ checkInst(model, 28, 28, LocalDate.of(2019, 1, 29), 25, 50.00, null, 0.97367168, 48.68, 7935.73, null, 8.52, null, null, 764.27,
null);
- checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 26, 50.00, null, 0.97263309, 48.63, 7894.21, null, 8.47, null, null, 755.81,
+ checkInst(model, 29, 29, LocalDate.of(2019, 1, 30), 26, 50.00, null, 0.97263309, 48.63, 7894.21, null, 8.48, null, null, 755.79,
null);
- checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 27, 50.00, null, 0.97159560, 48.58, 7852.63, null, 8.43, null, null, 747.38,
+ checkInst(model, 30, 30, LocalDate.of(2019, 1, 31), 27, 50.00, null, 0.97159560, 48.58, 7852.63, null, 8.42, null, null, 747.37,
null);
- checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 28, 50.00, null, 0.97055922, 48.53, 7811.02, null, 8.39, null, null, 738.99,
+ checkInst(model, 31, 31, LocalDate.of(2019, 2, 1), 28, 50.00, null, 0.97055922, 48.53, 7811.02, null, 8.39, null, null, 738.98,
null);
- checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 29, 50.00, null, 0.96952395, 48.48, 7769.36, null, 8.34, null, null, 730.65,
+ checkInst(model, 32, 32, LocalDate.of(2019, 2, 2), 29, 50.00, null, 0.96952395, 48.48, 7769.36, null, 8.34, null, null, 730.64,
null);
- checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 30, 50.00, null, 0.96848979, 48.42, 7727.66, null, 8.30, null, null, 722.35,
+ checkInst(model, 33, 33, LocalDate.of(2019, 2, 3), 30, 50.00, null, 0.96848979, 48.42, 7727.66, null, 8.30, null, null, 722.34,
null);
- checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 31, 50.00, null, 0.96745672, 48.37, 7685.91, null, 8.25, null, null, 714.10,
+ checkInst(model, 34, 34, LocalDate.of(2019, 2, 4), 31, 50.00, null, 0.96745672, 48.37, 7685.91, null, 8.25, null, null, 714.09,
null);
- checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 32, 50.00, null, 0.96642476, 48.32, 7644.12, null, 8.21, null, null, 705.89,
+ checkInst(model, 35, 35, LocalDate.of(2019, 2, 5), 32, 50.00, null, 0.96642476, 48.32, 7644.12, null, 8.21, null, null, 705.88,
null);
- checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 33, 50.00, null, 0.96539390, 48.27, 7602.28, null, 8.16, null, null, 697.73,
+ checkInst(model, 36, 36, LocalDate.of(2019, 2, 6), 33, 50.00, null, 0.96539390, 48.27, 7602.28, null, 8.16, null, null, 697.72,
null);
- checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 34, 50.00, null, 0.96436413, 48.22, 7560.40, null, 8.12, null, null, 689.61,
+ checkInst(model, 37, 37, LocalDate.of(2019, 2, 7), 34, 50.00, null, 0.96436413, 48.22, 7560.40, null, 8.12, null, null, 689.60,
null);
- checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 35, 50.00, null, 0.96333547, 48.17, 7518.47, null, 8.07, null, null, 681.54,
+ checkInst(model, 38, 38, LocalDate.of(2019, 2, 8), 35, 50.00, null, 0.96333547, 48.17, 7518.47, null, 8.07, null, null, 681.53,
null);
- checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 36, 50.00, null, 0.96230790, 48.12, 7476.50, null, 8.03, null, null, 673.51,
+ checkInst(model, 39, 39, LocalDate.of(2019, 2, 9), 36, 50.00, null, 0.96230790, 48.12, 7476.50, null, 8.03, null, null, 673.50,
null);
- checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 37, 50.00, null, 0.96128143, 48.06, 7434.48, null, 7.98, null, null, 665.53,
+ checkInst(model, 40, 40, LocalDate.of(2019, 2, 10), 37, 50.00, null, 0.96128143, 48.06, 7434.48, null, 7.98, null, null, 665.52,
null);
- checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 38, 50.00, null, 0.96025606, 48.01, 7392.42, null, 7.94, null, null, 657.59,
+ checkInst(model, 41, 41, LocalDate.of(2019, 2, 11), 38, 50.00, null, 0.96025606, 48.01, 7392.42, null, 7.94, null, null, 657.58,
null);
- checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 39, 50.00, null, 0.95923178, 47.96, 7350.31, null, 7.89, null, null, 649.70,
+ checkInst(model, 42, 42, LocalDate.of(2019, 2, 12), 39, 50.00, null, 0.95923178, 47.96, 7350.31, null, 7.89, null, null, 649.69,
null);
- checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 40, 50.00, null, 0.95820859, 47.91, 7308.16, null, 7.85, null, null, 641.85,
+ checkInst(model, 43, 43, LocalDate.of(2019, 2, 13), 40, 50.00, null, 0.95820859, 47.91, 7308.16, null, 7.85, null, null, 641.84,
null);
- checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 41, 50.00, null, 0.95718649, 47.86, 7265.97, null, 7.80, null, null, 634.05,
+ checkInst(model, 44, 44, LocalDate.of(2019, 2, 14), 41, 50.00, null, 0.95718649, 47.86, 7265.97, null, 7.81, null, null, 634.03,
null);
- checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 42, 50.00, null, 0.95616548, 47.81, 7223.72, null, 7.76, null, null, 626.29,
+ checkInst(model, 45, 45, LocalDate.of(2019, 2, 15), 42, 50.00, null, 0.95616548, 47.81, 7223.72, null, 7.75, null, null, 626.28,
null);
- checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 43, 50.00, null, 0.95514557, 47.76, 7181.44, null, 7.71, null, null, 618.58,
+ checkInst(model, 46, 46, LocalDate.of(2019, 2, 16), 43, 50.00, null, 0.95514557, 47.76, 7181.44, null, 7.72, null, null, 618.56,
null);
- checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 44, 50.00, null, 0.95412674, 47.71, 7139.11, null, 7.67, null, null, 610.91,
+ checkInst(model, 47, 47, LocalDate.of(2019, 2, 17), 44, 50.00, null, 0.95412674, 47.71, 7139.11, null, 7.67, null, null, 610.89,
null);
- checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 45, 50.00, null, 0.95310899, 47.66, 7096.73, null, 7.62, null, null, 603.29,
+ checkInst(model, 48, 48, LocalDate.of(2019, 2, 18), 45, 50.00, null, 0.95310899, 47.66, 7096.73, null, 7.62, null, null, 603.27,
null);
- checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 46, 50.00, null, 0.95209233, 47.60, 7054.31, null, 7.58, null, null, 595.71,
+ checkInst(model, 49, 49, LocalDate.of(2019, 2, 19), 46, 50.00, null, 0.95209233, 47.60, 7054.31, null, 7.58, null, null, 595.69,
null);
- checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 47, 50.00, null, 0.95107676, 47.55, 7011.84, null, 7.53, null, null, 588.18,
+ checkInst(model, 50, 50, LocalDate.of(2019, 2, 20), 47, 50.00, null, 0.95107676, 47.55, 7011.84, null, 7.53, null, null, 588.16,
null);
- checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 48, 50.00, null, 0.95006227, 47.50, 6969.33, null, 7.49, null, null, 580.69,
+ checkInst(model, 51, 51, LocalDate.of(2019, 2, 21), 48, 50.00, null, 0.95006227, 47.50, 6969.33, null, 7.49, null, null, 580.67,
null);
- checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 49, 50.00, null, 0.94904886, 47.45, 6926.77, null, 7.44, null, null, 573.25,
+ checkInst(model, 52, 52, LocalDate.of(2019, 2, 22), 49, 50.00, null, 0.94904886, 47.45, 6926.77, null, 7.44, null, null, 573.23,
null);
- checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 50, 50.00, null, 0.94803653, 47.40, 6884.17, null, 7.40, null, null, 565.85,
+ checkInst(model, 53, 53, LocalDate.of(2019, 2, 23), 50, 50.00, null, 0.94803653, 47.40, 6884.17, null, 7.40, null, null, 565.83,
null);
- checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 51, 50.00, null, 0.94702529, 47.35, 6841.52, null, 7.35, null, null, 558.50,
+ checkInst(model, 54, 54, LocalDate.of(2019, 2, 24), 51, 50.00, null, 0.94702529, 47.35, 6841.52, null, 7.35, null, null, 558.48,
null);
- checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 52, 50.00, null, 0.94601512, 47.30, 6798.82, null, 7.31, null, null, 551.19,
+ checkInst(model, 55, 55, LocalDate.of(2019, 2, 25), 52, 50.00, null, 0.94601512, 47.30, 6798.82, null, 7.30, null, null, 551.18,
null);
- checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 53, 50.00, null, 0.94500603, 47.25, 6756.08, null, 7.26, null, null, 543.93,
+ checkInst(model, 56, 56, LocalDate.of(2019, 2, 26), 53, 50.00, null, 0.94500603, 47.25, 6756.08, null, 7.26, null, null, 543.92,
null);
- checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 54, 50.00, null, 0.94399801, 47.20, 6713.30, null, 7.21, null, null, 536.72,
+ checkInst(model, 57, 57, LocalDate.of(2019, 2, 27), 54, 50.00, null, 0.94399801, 47.20, 6713.30, null, 7.22, null, null, 536.70,
null);
- checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 55, 50.00, null, 0.94299107, 47.15, 6670.47, null, 7.17, null, null, 529.55,
+ checkInst(model, 58, 58, LocalDate.of(2019, 2, 28), 55, 50.00, null, 0.94299107, 47.15, 6670.47, null, 7.17, null, null, 529.53,
null);
- checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 56, 50.00, null, 0.94198521, 47.10, 6627.59, null, 7.12, null, null, 522.43,
+ checkInst(model, 59, 59, LocalDate.of(2019, 3, 1), 56, 50.00, null, 0.94198521, 47.10, 6627.59, null, 7.12, null, null, 522.41,
null);
- checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 57, 50.00, null, 0.94098042, 47.05, 6584.67, null, 7.08, null, null, 515.35,
+ checkInst(model, 60, 60, LocalDate.of(2019, 3, 2), 57, 50.00, null, 0.94098042, 47.05, 6584.67, null, 7.08, null, null, 515.33,
null);
- checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 58, 50.00, null, 0.93997669, 47.00, 6541.70, null, 7.03, null, null, 508.32,
+ checkInst(model, 61, 61, LocalDate.of(2019, 3, 3), 58, 50.00, null, 0.93997669, 47.00, 6541.70, null, 7.03, null, null, 508.30,
null);
- checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 59, 50.00, null, 0.93897404, 46.95, 6498.68, null, 6.99, null, null, 501.33,
+ checkInst(model, 62, 62, LocalDate.of(2019, 3, 4), 59, 50.00, null, 0.93897404, 46.95, 6498.68, null, 6.98, null, null, 501.32,
null);
- checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 60, 50.00, null, 0.93797246, 46.90, 6455.62, null, 6.94, null, null, 494.39,
+ checkInst(model, 63, 63, LocalDate.of(2019, 3, 5), 60, 50.00, null, 0.93797246, 46.90, 6455.62, null, 6.94, null, null, 494.38,
null);
- checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 61, 50.00, null, 0.93697195, 46.85, 6412.51, null, 6.89, null, null, 487.50,
+ checkInst(model, 64, 64, LocalDate.of(2019, 3, 6), 61, 50.00, null, 0.93697195, 46.85, 6412.51, null, 6.89, null, null, 487.49,
null);
- checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 62, 50.00, null, 0.93597251, 46.80, 6369.36, null, 6.85, null, null, 480.65,
+ checkInst(model, 65, 65, LocalDate.of(2019, 3, 7), 62, 50.00, null, 0.93597251, 46.80, 6369.36, null, 6.85, null, null, 480.64,
null);
- checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 63, 50.00, null, 0.93497413, 46.75, 6326.16, null, 6.80, null, null, 473.85,
+ checkInst(model, 66, 66, LocalDate.of(2019, 3, 8), 63, 50.00, null, 0.93497413, 46.75, 6326.16, null, 6.80, null, null, 473.84,
null);
- checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 64, 50.00, null, 0.93397681, 46.70, 6282.92, null, 6.76, null, null, 467.09,
+ checkInst(model, 67, 67, LocalDate.of(2019, 3, 9), 64, 50.00, null, 0.93397681, 46.70, 6282.92, null, 6.76, null, null, 467.08,
null);
- checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 65, 50.00, null, 0.93298056, 46.65, 6239.63, null, 6.71, null, null, 460.38,
+ checkInst(model, 68, 68, LocalDate.of(2019, 3, 10), 65, 50.00, null, 0.93298056, 46.65, 6239.63, null, 6.71, null, null, 460.37,
null);
- checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 66, 50.00, null, 0.93198538, 46.60, 6196.29, null, 6.66, null, null, 453.72,
+ checkInst(model, 69, 69, LocalDate.of(2019, 3, 11), 66, 50.00, null, 0.93198538, 46.60, 6196.29, null, 6.66, null, null, 453.71,
null);
- checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 67, 50.00, null, 0.93099125, 46.55, 6152.91, null, 6.62, null, null, 447.10,
+ checkInst(model, 70, 70, LocalDate.of(2019, 3, 12), 67, 50.00, null, 0.93099125, 46.55, 6152.91, null, 6.62, null, null, 447.09,
null);
- checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 68, 50.00, null, 0.92999818, 46.50, 6109.48, null, 6.57, null, null, 440.53,
+ checkInst(model, 71, 71, LocalDate.of(2019, 3, 13), 68, 50.00, null, 0.92999818, 46.50, 6109.48, null, 6.57, null, null, 440.52,
null);
- checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 69, 50.00, null, 0.92900618, 46.45, 6066.00, null, 6.52, null, null, 434.01,
+ checkInst(model, 72, 72, LocalDate.of(2019, 3, 14), 69, 50.00, null, 0.92900618, 46.45, 6066.00, null, 6.52, null, null, 434.00,
null);
- checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 70, 50.00, null, 0.92801523, 46.40, 6022.48, null, 6.48, null, null, 427.53,
+ checkInst(model, 73, 73, LocalDate.of(2019, 3, 15), 70, 50.00, null, 0.92801523, 46.40, 6022.48, null, 6.48, null, null, 427.52,
null);
- checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 71, 50.00, null, 0.92702534, 46.35, 5978.91, null, 6.43, null, null, 421.10,
+ checkInst(model, 74, 74, LocalDate.of(2019, 3, 16), 71, 50.00, null, 0.92702534, 46.35, 5978.91, null, 6.43, null, null, 421.09,
null);
- checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 72, 50.00, null, 0.92603650, 46.30, 5935.29, null, 6.38, null, null, 414.72,
+ checkInst(model, 75, 75, LocalDate.of(2019, 3, 17), 72, 50.00, null, 0.92603650, 46.30, 5935.29, null, 6.38, null, null, 414.71,
null);
- checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 73, 50.00, null, 0.92504872, 46.25, 5891.63, null, 6.34, null, null, 408.38,
+ checkInst(model, 76, 76, LocalDate.of(2019, 3, 18), 73, 50.00, null, 0.92504872, 46.25, 5891.63, null, 6.34, null, null, 408.37,
null);
- checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 74, 50.00, null, 0.92406200, 46.20, 5847.92, null, 6.29, null, null, 402.09,
+ checkInst(model, 77, 77, LocalDate.of(2019, 3, 19), 74, 50.00, null, 0.92406200, 46.20, 5847.92, null, 6.29, null, null, 402.08,
null);
- checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 75, 50.00, null, 0.92307632, 46.15, 5804.17, null, 6.24, null, null, 395.85,
+ checkInst(model, 78, 78, LocalDate.of(2019, 3, 20), 75, 50.00, null, 0.92307632, 46.15, 5804.17, null, 6.25, null, null, 395.83,
null);
- checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 76, 50.00, null, 0.92209170, 46.10, 5760.36, null, 6.20, null, null, 389.65,
+ checkInst(model, 79, 79, LocalDate.of(2019, 3, 21), 76, 50.00, null, 0.92209170, 46.10, 5760.36, null, 6.19, null, null, 389.64,
null);
- checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 77, 50.00, null, 0.92110813, 46.06, 5716.52, null, 6.15, null, null, 383.50,
+ checkInst(model, 80, 80, LocalDate.of(2019, 3, 22), 77, 50.00, null, 0.92110813, 46.06, 5716.52, null, 6.16, null, null, 383.48,
null);
- checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 78, 50.00, null, 0.92012560, 46.01, 5672.62, null, 6.10, null, null, 377.40,
+ checkInst(model, 81, 81, LocalDate.of(2019, 3, 23), 78, 50.00, null, 0.92012560, 46.01, 5672.62, null, 6.10, null, null, 377.38,
null);
- checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 79, 50.00, null, 0.91914413, 45.96, 5628.68, null, 6.06, null, null, 371.34,
+ checkInst(model, 82, 82, LocalDate.of(2019, 3, 24), 79, 50.00, null, 0.91914413, 45.96, 5628.68, null, 6.06, null, null, 371.32,
null);
- checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 80, 50.00, null, 0.91816370, 45.91, 5584.69, null, 6.01, null, null, 365.33,
+ checkInst(model, 83, 83, LocalDate.of(2019, 3, 25), 80, 50.00, null, 0.91816370, 45.91, 5584.69, null, 6.01, null, null, 365.31,
null);
- checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 81, 50.00, null, 0.91718432, 45.86, 5540.65, null, 5.96, null, null, 359.37,
+ checkInst(model, 84, 84, LocalDate.of(2019, 3, 26), 81, 50.00, null, 0.91718432, 45.86, 5540.65, null, 5.96, null, null, 359.35,
null);
- checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 82, 50.00, null, 0.91620598, 45.81, 5496.57, null, 5.92, null, null, 353.45,
+ checkInst(model, 85, 85, LocalDate.of(2019, 3, 27), 82, 50.00, null, 0.91620598, 45.81, 5496.57, null, 5.92, null, null, 353.43,
null);
- checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 83, 50.00, null, 0.91522868, 45.76, 5452.44, null, 5.87, null, null, 347.58,
+ checkInst(model, 86, 86, LocalDate.of(2019, 3, 28), 83, 50.00, null, 0.91522868, 45.76, 5452.44, null, 5.87, null, null, 347.56,
null);
- checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 84, 50.00, null, 0.91425243, 45.71, 5408.26, null, 5.82, null, null, 341.76,
+ checkInst(model, 87, 87, LocalDate.of(2019, 3, 29), 84, 50.00, null, 0.91425243, 45.71, 5408.26, null, 5.82, null, null, 341.74,
null);
- checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 85, 50.00, null, 0.91327722, 45.66, 5364.03, null, 5.78, null, null, 335.98,
+ checkInst(model, 88, 88, LocalDate.of(2019, 3, 30), 85, 50.00, null, 0.91327722, 45.66, 5364.03, null, 5.77, null, null, 335.97,
null);
- checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 86, 50.00, null, 0.91230305, 45.62, 5319.76, null, 5.73, null, null, 330.25,
+ checkInst(model, 89, 89, LocalDate.of(2019, 3, 31), 86, 50.00, null, 0.91230305, 45.62, 5319.76, null, 5.73, null, null, 330.24,
null);
- checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 87, 50.00, null, 0.91132992, 45.57, 5275.44, null, 5.68, null, null, 324.57,
+ checkInst(model, 90, 90, LocalDate.of(2019, 4, 1), 87, 50.00, null, 0.91132992, 45.57, 5275.44, null, 5.68, null, null, 324.56,
null);
- checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 88, 50.00, null, 0.91035783, 45.52, 5231.08, null, 5.63, null, null, 318.94,
+ checkInst(model, 91, 91, LocalDate.of(2019, 4, 2), 88, 50.00, null, 0.91035783, 45.52, 5231.08, null, 5.64, null, null, 318.92,
null);
- checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 89, 50.00, null, 0.90938677, 45.47, 5186.66, null, 5.59, null, null, 313.35,
+ checkInst(model, 92, 92, LocalDate.of(2019, 4, 3), 89, 50.00, null, 0.90938677, 45.47, 5186.66, null, 5.58, null, null, 313.34,
null);
- checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 90, 50.00, null, 0.90841675, 45.42, 5142.20, null, 5.54, null, null, 307.81,
+ checkInst(model, 93, 93, LocalDate.of(2019, 4, 4), 90, 50.00, null, 0.90841675, 45.42, 5142.20, null, 5.54, null, null, 307.80,
null);
- checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 91, 50.00, null, 0.90744776, 45.37, 5097.69, null, 5.49, null, null, 302.32,
+ checkInst(model, 94, 94, LocalDate.of(2019, 4, 5), 91, 50.00, null, 0.90744776, 45.37, 5097.69, null, 5.49, null, null, 302.31,
null);
- checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 92, 50.00, null, 0.90647981, 45.32, 5053.13, null, 5.44, null, null, 296.88,
+ checkInst(model, 95, 95, LocalDate.of(2019, 4, 6), 92, 50.00, null, 0.90647981, 45.32, 5053.13, null, 5.44, null, null, 296.87,
null);
- checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 93, 50.00, null, 0.90551289, 45.28, 5008.53, null, 5.40, null, null, 291.48,
+ checkInst(model, 96, 96, LocalDate.of(2019, 4, 7), 93, 50.00, null, 0.90551289, 45.28, 5008.53, null, 5.40, null, null, 291.47,
null);
- checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 94, 50.00, null, 0.90454700, 45.23, 4963.88, null, 5.35, null, null, 286.13,
+ checkInst(model, 97, 97, LocalDate.of(2019, 4, 8), 94, 50.00, null, 0.90454700, 45.23, 4963.88, null, 5.35, null, null, 286.12,
null);
- checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 95, 50.00, null, 0.90358215, 45.18, 4919.18, null, 5.30, null, null, 280.83,
+ checkInst(model, 98, 98, LocalDate.of(2019, 4, 9), 95, 50.00, null, 0.90358215, 45.18, 4919.18, null, 5.30, null, null, 280.82,
null);
- checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 96, 50.00, null, 0.90261832, 45.13, 4874.43, null, 5.25, null, null, 275.58,
+ checkInst(model, 99, 99, LocalDate.of(2019, 4, 10), 96, 50.00, null, 0.90261832, 45.13, 4874.43, null, 5.25, null, null, 275.57,
null);
- checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 97, 50.00, null, 0.90165552, 45.08, 4829.64, null, 5.20, null, null, 270.38,
+ checkInst(model, 100, 100, LocalDate.of(2019, 4, 11), 97, 50.00, null, 0.90165552, 45.08, 4829.64, null, 5.21, null, null, 270.36,
null);
- checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 98, 50.00, null, 0.90069374, 45.03, 4784.79, null, 5.16, null, null, 265.22,
+ checkInst(model, 101, 101, LocalDate.of(2019, 4, 12), 98, 50.00, null, 0.90069374, 45.03, 4784.79, null, 5.15, null, null, 265.21,
null);
- checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 99, 50.00, null, 0.89973299, 44.99, 4739.90, null, 5.11, null, null, 260.11,
+ checkInst(model, 102, 102, LocalDate.of(2019, 4, 13), 99, 50.00, null, 0.89973299, 44.99, 4739.90, null, 5.11, null, null, 260.10,
null);
- checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 100, 50.00, null, 0.89877327, 44.94, 4694.96, null, 5.06, null, null, 255.05,
+ checkInst(model, 103, 103, LocalDate.of(2019, 4, 14), 100, 50.00, null, 0.89877327, 44.94, 4694.96, null, 5.06, null, null, 255.04,
null);
- checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 101, 50.00, null, 0.89781457, 44.89, 4649.98, null, 5.01, null, null, 250.04,
+ checkInst(model, 104, 104, LocalDate.of(2019, 4, 15), 101, 50.00, null, 0.89781457, 44.89, 4649.98, null, 5.02, null, null, 250.02,
null);
- checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 102, 50.00, null, 0.89685689, 44.84, 4604.94, null, 4.97, null, null, 245.07,
+ checkInst(model, 105, 105, LocalDate.of(2019, 4, 16), 102, 50.00, null, 0.89685689, 44.84, 4604.94, null, 4.96, null, null, 245.06,
null);
- checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 103, 50.00, null, 0.89590024, 44.80, 4559.86, null, 4.92, null, null, 240.15,
+ checkInst(model, 106, 106, LocalDate.of(2019, 4, 17), 103, 50.00, null, 0.89590024, 44.80, 4559.86, null, 4.92, null, null, 240.14,
null);
- checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 104, 50.00, null, 0.89494460, 44.75, 4514.73, null, 4.87, null, null, 235.28,
+ checkInst(model, 107, 107, LocalDate.of(2019, 4, 18), 104, 50.00, null, 0.89494460, 44.75, 4514.73, null, 4.87, null, null, 235.27,
null);
- checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 105, 50.00, null, 0.89398999, 44.70, 4469.55, null, 4.82, null, null, 230.46,
+ checkInst(model, 108, 108, LocalDate.of(2019, 4, 19), 105, 50.00, null, 0.89398999, 44.70, 4469.55, null, 4.82, null, null, 230.45,
null);
- checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 106, 50.00, null, 0.89303639, 44.65, 4424.32, null, 4.77, null, null, 225.69,
+ checkInst(model, 109, 109, LocalDate.of(2019, 4, 20), 106, 50.00, null, 0.89303639, 44.65, 4424.32, null, 4.77, null, null, 225.68,
null);
- checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 107, 50.00, null, 0.89208381, 44.60, 4379.05, null, 4.72, null, null, 220.97,
+ checkInst(model, 110, 110, LocalDate.of(2019, 4, 21), 107, 50.00, null, 0.89208381, 44.60, 4379.05, null, 4.73, null, null, 220.95,
null);
- checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 108, 50.00, null, 0.89113225, 44.56, 4333.72, null, 4.68, null, null, 216.29,
+ checkInst(model, 111, 111, LocalDate.of(2019, 4, 22), 108, 50.00, null, 0.89113225, 44.56, 4333.72, null, 4.67, null, null, 216.28,
null);
- checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 109, 50.00, null, 0.89018170, 44.51, 4288.35, null, 4.63, null, null, 211.66,
+ checkInst(model, 112, 112, LocalDate.of(2019, 4, 23), 109, 50.00, null, 0.89018170, 44.51, 4288.35, null, 4.63, null, null, 211.65,
null);
- checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 110, 50.00, null, 0.88923216, 44.46, 4242.93, null, 4.58, null, null, 207.08,
+ checkInst(model, 113, 113, LocalDate.of(2019, 4, 24), 110, 50.00, null, 0.88923216, 44.46, 4242.93, null, 4.58, null, null, 207.07,
null);
- checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 111, 50.00, null, 0.88828364, 44.41, 4197.46, null, 4.53, null, null, 202.55,
+ checkInst(model, 114, 114, LocalDate.of(2019, 4, 25), 111, 50.00, null, 0.88828364, 44.41, 4197.46, null, 4.53, null, null, 202.54,
null);
- checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 112, 50.00, null, 0.88733613, 44.37, 4151.94, null, 4.48, null, null, 198.07,
+ checkInst(model, 115, 115, LocalDate.of(2019, 4, 26), 112, 50.00, null, 0.88733613, 44.37, 4151.94, null, 4.48, null, null, 198.06,
null);
- checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 113, 50.00, null, 0.88638963, 44.32, 4106.38, null, 4.43, null, null, 193.64,
+ checkInst(model, 116, 116, LocalDate.of(2019, 4, 27), 113, 50.00, null, 0.88638963, 44.32, 4106.38, null, 4.44, null, null, 193.62,
null);
- checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 114, 50.00, null, 0.88544414, 44.27, 4060.76, null, 4.38, null, null, 189.26,
+ checkInst(model, 117, 117, LocalDate.of(2019, 4, 28), 114, 50.00, null, 0.88544414, 44.27, 4060.76, null, 4.38, null, null, 189.24,
null);
- checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 115, 50.00, null, 0.88449966, 44.22, 4015.10, null, 4.34, null, null, 184.92,
+ checkInst(model, 118, 118, LocalDate.of(2019, 4, 29), 115, 50.00, null, 0.88449966, 44.22, 4015.10, null, 4.34, null, null, 184.90,
null);
- checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 116, 50.00, null, 0.88355619, 44.18, 3969.38, null, 4.29, null, null, 180.63,
+ checkInst(model, 119, 119, LocalDate.of(2019, 4, 30), 116, 50.00, null, 0.88355619, 44.18, 3969.38, null, 4.28, null, null, 180.62,
null);
- checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 117, 50.00, null, 0.88261372, 44.13, 3923.62, null, 4.24, null, null, 176.39,
+ checkInst(model, 120, 120, LocalDate.of(2019, 5, 1), 117, 50.00, null, 0.88261372, 44.13, 3923.62, null, 4.24, null, null, 176.38,
null);
- checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 118, 50.00, null, 0.88167226, 44.08, 3877.81, null, 4.19, null, null, 172.20,
+ checkInst(model, 121, 121, LocalDate.of(2019, 5, 2), 118, 50.00, null, 0.88167226, 44.08, 3877.81, null, 4.19, null, null, 172.19,
null);
- checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 119, 50.00, null, 0.88073180, 44.04, 3831.95, null, 4.14, null, null, 168.06,
+ checkInst(model, 122, 122, LocalDate.of(2019, 5, 3), 119, 50.00, null, 0.88073180, 44.04, 3831.95, null, 4.14, null, null, 168.05,
null);
- checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 120, 50.00, null, 0.87979234, 43.99, 3786.04, null, 4.09, null, null, 163.97,
+ checkInst(model, 123, 123, LocalDate.of(2019, 5, 4), 120, 50.00, null, 0.87979234, 43.99, 3786.04, null, 4.09, null, null, 163.96,
null);
- checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 121, 50.00, null, 0.87885389, 43.94, 3740.09, null, 4.04, null, null, 159.93,
+ checkInst(model, 124, 124, LocalDate.of(2019, 5, 5), 121, 50.00, null, 0.87885389, 43.94, 3740.09, null, 4.05, null, null, 159.91,
null);
- checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 122, 50.00, null, 0.87791644, 43.90, 3694.08, null, 3.99, null, null, 155.94,
+ checkInst(model, 125, 125, LocalDate.of(2019, 5, 6), 122, 50.00, null, 0.87791644, 43.90, 3694.08, null, 3.99, null, null, 155.92,
null);
- checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 123, 50.00, null, 0.87697999, 43.85, 3648.03, null, 3.94, null, null, 152.00,
+ checkInst(model, 126, 126, LocalDate.of(2019, 5, 7), 123, 50.00, null, 0.87697999, 43.85, 3648.03, null, 3.95, null, null, 151.97,
null);
- checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 124, 50.00, null, 0.87604453, 43.80, 3601.92, null, 3.90, null, null, 148.10,
+ checkInst(model, 127, 127, LocalDate.of(2019, 5, 8), 124, 50.00, null, 0.87604453, 43.80, 3601.92, null, 3.89, null, null, 148.08,
null);
- checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 125, 50.00, null, 0.87511008, 43.76, 3555.77, null, 3.85, null, null, 144.25,
+ checkInst(model, 128, 128, LocalDate.of(2019, 5, 9), 125, 50.00, null, 0.87511008, 43.76, 3555.77, null, 3.85, null, null, 144.23,
null);
- checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 126, 50.00, null, 0.87417662, 43.71, 3509.56, null, 3.80, null, null, 140.45,
+ checkInst(model, 129, 129, LocalDate.of(2019, 5, 10), 126, 50.00, null, 0.87417662, 43.71, 3509.56, null, 3.79, null, null, 140.44,
null);
- checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 127, 50.00, null, 0.87324416, 43.66, 3463.31, null, 3.75, null, null, 136.70,
+ checkInst(model, 130, 130, LocalDate.of(2019, 5, 11), 127, 50.00, null, 0.87324416, 43.66, 3463.31, null, 3.75, null, null, 136.69,
null);
- checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 128, 50.00, null, 0.87231269, 43.62, 3417.01, null, 3.70, null, null, 133.00,
+ checkInst(model, 131, 131, LocalDate.of(2019, 5, 12), 128, 50.00, null, 0.87231269, 43.62, 3417.01, null, 3.70, null, null, 132.99,
null);
- checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 129, 50.00, null, 0.87138221, 43.57, 3370.66, null, 3.65, null, null, 129.35,
+ checkInst(model, 132, 132, LocalDate.of(2019, 5, 13), 129, 50.00, null, 0.87138221, 43.57, 3370.66, null, 3.65, null, null, 129.34,
null);
- checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 130, 50.00, null, 0.87045273, 43.52, 3324.26, null, 3.60, null, null, 125.75,
+ checkInst(model, 133, 133, LocalDate.of(2019, 5, 14), 130, 50.00, null, 0.87045273, 43.52, 3324.26, null, 3.60, null, null, 125.74,
null);
- checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 131, 50.00, null, 0.86952424, 43.48, 3277.81, null, 3.55, null, null, 122.20,
+ checkInst(model, 134, 134, LocalDate.of(2019, 5, 15), 131, 50.00, null, 0.86952424, 43.48, 3277.81, null, 3.55, null, null, 122.19,
null);
- checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 132, 50.00, null, 0.86859674, 43.43, 3231.31, null, 3.50, null, null, 118.70,
+ checkInst(model, 135, 135, LocalDate.of(2019, 5, 16), 132, 50.00, null, 0.86859674, 43.43, 3231.31, null, 3.50, null, null, 118.69,
null);
- checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 133, 50.00, null, 0.86767023, 43.38, 3184.76, null, 3.45, null, null, 115.25,
+ checkInst(model, 136, 136, LocalDate.of(2019, 5, 17), 133, 50.00, null, 0.86767023, 43.38, 3184.76, null, 3.45, null, null, 115.24,
null);
- checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 134, 50.00, null, 0.86674471, 43.34, 3138.16, null, 3.40, null, null, 111.85,
+ checkInst(model, 137, 137, LocalDate.of(2019, 5, 18), 134, 50.00, null, 0.86674471, 43.34, 3138.16, null, 3.40, null, null, 111.84,
null);
- checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 135, 50.00, null, 0.86582017, 43.29, 3091.51, null, 3.35, null, null, 108.50,
+ checkInst(model, 138, 138, LocalDate.of(2019, 5, 19), 135, 50.00, null, 0.86582017, 43.29, 3091.51, null, 3.35, null, null, 108.49,
null);
- checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 136, 50.00, null, 0.86489662, 43.24, 3044.81, null, 3.30, null, null, 105.20,
+ checkInst(model, 139, 139, LocalDate.of(2019, 5, 20), 136, 50.00, null, 0.86489662, 43.24, 3044.81, null, 3.30, null, null, 105.19,
null);
- checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 137, 50.00, null, 0.86397406, 43.20, 2998.06, null, 3.25, null, null, 101.95,
+ checkInst(model, 140, 140, LocalDate.of(2019, 5, 21), 137, 50.00, null, 0.86397406, 43.20, 2998.06, null, 3.25, null, null, 101.94,
null);
- checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 138, 50.00, null, 0.86305248, 43.15, 2951.26, null, 3.20, null, null, 98.75,
+ checkInst(model, 141, 141, LocalDate.of(2019, 5, 22), 138, 50.00, null, 0.86305248, 43.15, 2951.26, null, 3.20, null, null, 98.74,
null);
- checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 139, 50.00, null, 0.86213188, 43.11, 2904.42, null, 3.15, null, null, 95.60,
+ checkInst(model, 142, 142, LocalDate.of(2019, 5, 23), 139, 50.00, null, 0.86213188, 43.11, 2904.42, null, 3.16, null, null, 95.58,
null);
- checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 140, 50.00, null, 0.86121227, 43.06, 2857.52, null, 3.10, null, null, 92.50,
+ checkInst(model, 143, 143, LocalDate.of(2019, 5, 24), 140, 50.00, null, 0.86121227, 43.06, 2857.52, null, 3.10, null, null, 92.48,
null);
- checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 141, 50.00, null, 0.86029363, 43.01, 2810.57, null, 3.05, null, null, 89.45,
+ checkInst(model, 144, 144, LocalDate.of(2019, 5, 25), 141, 50.00, null, 0.86029363, 43.01, 2810.57, null, 3.05, null, null, 89.43,
null);
- checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 142, 50.00, null, 0.85937598, 42.97, 2763.57, null, 3.00, null, null, 86.45,
+ checkInst(model, 145, 145, LocalDate.of(2019, 5, 26), 142, 50.00, null, 0.85937598, 42.97, 2763.57, null, 3.00, null, null, 86.43,
null);
- checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 143, 50.00, null, 0.85845930, 42.92, 2716.52, null, 2.95, null, null, 83.50,
+ checkInst(model, 146, 146, LocalDate.of(2019, 5, 27), 143, 50.00, null, 0.85845930, 42.92, 2716.52, null, 2.95, null, null, 83.48,
null);
- checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 144, 50.00, null, 0.85754361, 42.88, 2669.42, null, 2.90, null, null, 80.60,
+ checkInst(model, 147, 147, LocalDate.of(2019, 5, 28), 144, 50.00, null, 0.85754361, 42.88, 2669.42, null, 2.90, null, null, 80.58,
null);
- checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 145, 50.00, null, 0.85662889, 42.83, 2622.27, null, 2.85, null, null, 77.75,
+ checkInst(model, 148, 148, LocalDate.of(2019, 5, 29), 145, 50.00, null, 0.85662889, 42.83, 2622.27, null, 2.85, null, null, 77.73,
null);
- checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 146, 50.00, null, 0.85571514, 42.79, 2575.07, null, 2.80, null, null, 74.95,
+ checkInst(model, 149, 149, LocalDate.of(2019, 5, 30), 146, 50.00, null, 0.85571514, 42.79, 2575.07, null, 2.80, null, null, 74.93,
null);
- checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 147, 50.00, null, 0.85480237, 42.74, 2527.82, null, 2.75, null, null, 72.20,
+ checkInst(model, 150, 150, LocalDate.of(2019, 5, 31), 147, 50.00, null, 0.85480237, 42.74, 2527.82, null, 2.75, null, null, 72.18,
null);
- checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 148, 50.00, null, 0.85389057, 42.69, 2480.52, null, 2.70, null, null, 69.50,
+ checkInst(model, 151, 151, LocalDate.of(2019, 6, 1), 148, 50.00, null, 0.85389057, 42.69, 2480.52, null, 2.70, null, null, 69.48,
null);
- checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 149, 50.00, null, 0.85297975, 42.65, 2433.17, null, 2.65, null, null, 66.85,
+ checkInst(model, 152, 152, LocalDate.of(2019, 6, 2), 149, 50.00, null, 0.85297975, 42.65, 2433.17, null, 2.65, null, null, 66.83,
null);
- checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 150, 50.00, null, 0.85206990, 42.60, 2385.77, null, 2.60, null, null, 64.25,
+ checkInst(model, 153, 153, LocalDate.of(2019, 6, 3), 150, 50.00, null, 0.85206990, 42.60, 2385.77, null, 2.60, null, null, 64.23,
null);
- checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 151, 50.00, null, 0.85116101, 42.56, 2338.31, null, 2.55, null, null, 61.70,
+ checkInst(model, 154, 154, LocalDate.of(2019, 6, 4), 151, 50.00, null, 0.85116101, 42.56, 2338.31, null, 2.54, null, null, 61.69,
null);
- checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 152, 50.00, null, 0.85025310, 42.51, 2290.81, null, 2.50, null, null, 59.20,
+ checkInst(model, 155, 155, LocalDate.of(2019, 6, 5), 152, 50.00, null, 0.85025310, 42.51, 2290.81, null, 2.50, null, null, 59.19,
null);
- checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 153, 50.00, null, 0.84934616, 42.47, 2243.26, null, 2.45, null, null, 56.75,
+ checkInst(model, 156, 156, LocalDate.of(2019, 6, 6), 153, 50.00, null, 0.84934616, 42.47, 2243.26, null, 2.45, null, null, 56.74,
null);
- checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 154, 50.00, null, 0.84844018, 42.42, 2195.65, null, 2.40, null, null, 54.35,
+ checkInst(model, 157, 157, LocalDate.of(2019, 6, 7), 154, 50.00, null, 0.84844018, 42.42, 2195.65, null, 2.39, null, null, 54.35,
null);
- checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 155, 50.00, null, 0.84753517, 42.38, 2148.00, null, 2.34, null, null, 52.01,
+ checkInst(model, 158, 158, LocalDate.of(2019, 6, 8), 155, 50.00, null, 0.84753517, 42.38, 2148.00, null, 2.35, null, null, 52.00,
null);
- checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 156, 50.00, null, 0.84663113, 42.33, 2100.29, null, 2.29, null, null, 49.72,
+ checkInst(model, 159, 159, LocalDate.of(2019, 6, 9), 156, 50.00, null, 0.84663113, 42.33, 2100.29, null, 2.29, null, null, 49.71,
null);
- checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 157, 50.00, null, 0.84572805, 42.29, 2052.53, null, 2.24, null, null, 47.48,
+ checkInst(model, 160, 160, LocalDate.of(2019, 6, 10), 157, 50.00, null, 0.84572805, 42.29, 2052.53, null, 2.24, null, null, 47.47,
null);
- checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 158, 50.00, null, 0.84482593, 42.24, 2004.73, null, 2.19, null, null, 45.29,
+ checkInst(model, 161, 161, LocalDate.of(2019, 6, 11), 158, 50.00, null, 0.84482593, 42.24, 2004.73, null, 2.20, null, null, 45.27,
null);
- checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 159, 50.00, null, 0.84392477, 42.20, 1956.87, null, 2.14, null, null, 43.15,
+ checkInst(model, 162, 162, LocalDate.of(2019, 6, 12), 159, 50.00, null, 0.84392477, 42.20, 1956.87, null, 2.14, null, null, 43.13,
null);
- checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 160, 50.00, null, 0.84302458, 42.15, 1908.96, null, 2.09, null, null, 41.06,
+ checkInst(model, 163, 163, LocalDate.of(2019, 6, 13), 160, 50.00, null, 0.84302458, 42.15, 1908.96, null, 2.09, null, null, 41.04,
null);
- checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 161, 50.00, null, 0.84212535, 42.11, 1860.99, null, 2.04, null, null, 39.02,
+ checkInst(model, 164, 164, LocalDate.of(2019, 6, 14), 161, 50.00, null, 0.84212535, 42.11, 1860.99, null, 2.03, null, null, 39.01,
null);
- checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 162, 50.00, null, 0.84122707, 42.06, 1812.98, null, 1.99, null, null, 37.03,
+ checkInst(model, 165, 165, LocalDate.of(2019, 6, 15), 162, 50.00, null, 0.84122707, 42.06, 1812.98, null, 1.99, null, null, 37.02,
null);
- checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 163, 50.00, null, 0.84032975, 42.02, 1764.92, null, 1.94, null, null, 35.09,
+ checkInst(model, 166, 166, LocalDate.of(2019, 6, 16), 163, 50.00, null, 0.84032975, 42.02, 1764.92, null, 1.94, null, null, 35.08,
null);
- checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 164, 50.00, null, 0.83943340, 41.97, 1716.80, null, 1.88, null, null, 33.21,
+ checkInst(model, 167, 167, LocalDate.of(2019, 6, 17), 164, 50.00, null, 0.83943340, 41.97, 1716.80, null, 1.88, null, null, 33.20,
null);
- checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 165, 50.00, null, 0.83853799, 41.93, 1668.64, null, 1.83, null, null, 31.38,
+ checkInst(model, 168, 168, LocalDate.of(2019, 6, 18), 165, 50.00, null, 0.83853799, 41.93, 1668.64, null, 1.84, null, null, 31.36,
null);
- checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 166, 50.00, null, 0.83764354, 41.88, 1620.42, null, 1.78, null, null, 29.60,
+ checkInst(model, 169, 169, LocalDate.of(2019, 6, 19), 166, 50.00, null, 0.83764354, 41.88, 1620.42, null, 1.78, null, null, 29.58,
null);
- checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 167, 50.00, null, 0.83675005, 41.84, 1572.15, null, 1.73, null, null, 27.87,
+ checkInst(model, 170, 170, LocalDate.of(2019, 6, 20), 167, 50.00, null, 0.83675005, 41.84, 1572.15, null, 1.73, null, null, 27.85,
null);
- checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 168, 50.00, null, 0.83585751, 41.79, 1523.83, null, 1.68, null, null, 26.19,
+ checkInst(model, 171, 171, LocalDate.of(2019, 6, 21), 168, 50.00, null, 0.83585751, 41.79, 1523.83, null, 1.68, null, null, 26.17,
null);
- checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 169, 50.00, null, 0.83496592, 41.75, 1475.45, null, 1.63, null, null, 24.56,
+ checkInst(model, 172, 172, LocalDate.of(2019, 6, 22), 169, 50.00, null, 0.83496592, 41.75, 1475.45, null, 1.62, null, null, 24.55,
null);
- checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 170, 50.00, null, 0.83407528, 41.70, 1427.03, null, 1.58, null, null, 22.98,
+ checkInst(model, 173, 173, LocalDate.of(2019, 6, 23), 170, 50.00, null, 0.83407528, 41.70, 1427.03, null, 1.58, null, null, 22.97,
null);
- checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 171, 50.00, null, 0.83318560, 41.66, 1378.55, null, 1.52, null, null, 21.46,
+ checkInst(model, 174, 174, LocalDate.of(2019, 6, 24), 171, 50.00, null, 0.83318560, 41.66, 1378.55, null, 1.52, null, null, 21.45,
null);
- checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 172, 50.00, null, 0.83229686, 41.61, 1330.02, null, 1.47, null, null, 19.99,
+ checkInst(model, 175, 175, LocalDate.of(2019, 6, 25), 172, 50.00, null, 0.83229686, 41.61, 1330.02, null, 1.47, null, null, 19.98,
null);
- checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 173, 50.00, null, 0.83140907, 41.57, 1281.45, null, 1.42, null, null, 18.57,
+ checkInst(model, 176, 176, LocalDate.of(2019, 6, 26), 173, 50.00, null, 0.83140907, 41.57, 1281.45, null, 1.43, null, null, 18.55,
null);
- checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 174, 50.00, null, 0.83052222, 41.53, 1232.81, null, 1.37, null, null, 17.20,
+ checkInst(model, 177, 177, LocalDate.of(2019, 6, 27), 174, 50.00, null, 0.83052222, 41.53, 1232.81, null, 1.36, null, null, 17.19,
null);
- checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 175, 50.00, null, 0.82963633, 41.48, 1184.13, null, 1.32, null, null, 15.88,
+ checkInst(model, 178, 178, LocalDate.of(2019, 6, 28), 175, 50.00, null, 0.82963633, 41.48, 1184.13, null, 1.32, null, null, 15.87,
null);
- checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 176, 50.00, null, 0.82875137, 41.44, 1135.39, null, 1.26, null, null, 14.62,
+ checkInst(model, 179, 179, LocalDate.of(2019, 6, 29), 176, 50.00, null, 0.82875137, 41.44, 1135.39, null, 1.26, null, null, 14.61,
null);
- checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 177, 50.00, null, 0.82786736, 41.39, 1086.61, null, 1.21, null, null, 13.41,
+ checkInst(model, 180, 180, LocalDate.of(2019, 6, 30), 177, 50.00, null, 0.82786736, 41.39, 1086.61, null, 1.22, null, null, 13.39,
null);
- checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 178, 50.00, null, 0.82698430, 41.35, 1037.77, null, 1.16, null, null, 12.25,
+ checkInst(model, 181, 181, LocalDate.of(2019, 7, 1), 178, 50.00, null, 0.82698430, 41.35, 1037.77, null, 1.16, null, null, 12.23,
null);
- checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 179, 50.00, null, 0.82610217, 41.31, 988.88, null, 1.11, null, null, 11.14,
+ checkInst(model, 182, 182, LocalDate.of(2019, 7, 2), 179, 50.00, null, 0.82610217, 41.31, 988.88, null, 1.11, null, null, 11.12,
null);
- checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 180, 50.00, null, 0.82522099, 41.26, 939.93, null, 1.06, null, null, 10.08,
+ checkInst(model, 183, 183, LocalDate.of(2019, 7, 3), 180, 50.00, null, 0.82522099, 41.26, 939.93, null, 1.05, null, null, 10.07,
null);
- checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 181, 50.00, null, 0.82434075, 41.22, 890.93, null, 1.00, null, null, 9.08,
+ checkInst(model, 184, 184, LocalDate.of(2019, 7, 4), 181, 50.00, null, 0.82434075, 41.22, 890.93, null, 1.00, null, null, 9.07,
null);
- checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 182, 50.00, null, 0.82346144, 41.17, 841.89, null, 0.95, null, null, 8.13,
+ checkInst(model, 185, 185, LocalDate.of(2019, 7, 5), 182, 50.00, null, 0.82346144, 41.17, 841.89, null, 0.96, null, null, 8.11,
null);
- checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 183, 50.00, null, 0.82258308, 41.13, 792.79, null, 0.90, null, null, 7.23,
+ checkInst(model, 186, 186, LocalDate.of(2019, 7, 6), 183, 50.00, null, 0.82258308, 41.13, 792.79, null, 0.90, null, null, 7.21,
null);
- checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 184, 50.00, null, 0.82170565, 41.09, 743.63, null, 0.85, null, null, 6.38,
+ checkInst(model, 187, 187, LocalDate.of(2019, 7, 7), 184, 50.00, null, 0.82170565, 41.09, 743.63, null, 0.84, null, null, 6.37,
null);
- checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 185, 50.00, null, 0.82082916, 41.04, 694.43, null, 0.79, null, null, 5.59,
+ checkInst(model, 188, 188, LocalDate.of(2019, 7, 8), 185, 50.00, null, 0.82082916, 41.04, 694.43, null, 0.80, null, null, 5.57,
null);
- checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 186, 50.00, null, 0.81995360, 41.00, 645.17, null, 0.74, null, null, 4.85,
+ checkInst(model, 189, 189, LocalDate.of(2019, 7, 9), 186, 50.00, null, 0.81995360, 41.00, 645.17, null, 0.74, null, null, 4.83,
null);
- checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 187, 50.00, null, 0.81907897, 40.95, 595.86, null, 0.69, null, null, 4.16,
+ checkInst(model, 190, 190, LocalDate.of(2019, 7, 10), 187, 50.00, null, 0.81907897, 40.95, 595.86, null, 0.69, null, null, 4.14,
null);
- checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 188, 50.00, null, 0.81820528, 40.91, 546.49, null, 0.64, null, null, 3.52,
+ checkInst(model, 191, 191, LocalDate.of(2019, 7, 11), 188, 50.00, null, 0.81820528, 40.91, 546.49, null, 0.63, null, null, 3.51,
null);
- checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 189, 50.00, null, 0.81733252, 40.87, 497.08, null, 0.58, null, null, 2.94,
+ checkInst(model, 192, 192, LocalDate.of(2019, 7, 12), 189, 50.00, null, 0.81733252, 40.87, 497.08, null, 0.59, null, null, 2.92,
null);
- checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 190, 50.00, null, 0.81646069, 40.82, 447.61, null, 0.53, null, null, 2.41,
+ checkInst(model, 193, 193, LocalDate.of(2019, 7, 13), 190, 50.00, null, 0.81646069, 40.82, 447.61, null, 0.53, null, null, 2.39,
null);
- checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 191, 50.00, null, 0.81558979, 40.78, 398.08, null, 0.48, null, null, 1.93,
+ checkInst(model, 194, 194, LocalDate.of(2019, 7, 14), 191, 50.00, null, 0.81558979, 40.78, 398.08, null, 0.47, null, null, 1.92,
null);
- checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 192, 50.00, null, 0.81471983, 40.74, 348.51, null, 0.43, null, null, 1.50,
+ checkInst(model, 195, 195, LocalDate.of(2019, 7, 15), 192, 50.00, null, 0.81471983, 40.74, 348.51, null, 0.43, null, null, 1.49,
null);
- checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 193, 50.00, null, 0.81385078, 40.69, 298.88, null, 0.37, null, null, 1.13,
+ checkInst(model, 196, 196, LocalDate.of(2019, 7, 16), 193, 50.00, null, 0.81385078, 40.69, 298.88, null, 0.37, null, null, 1.12,
null);
- checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 194, 50.00, null, 0.81298267, 40.65, 249.20, null, 0.32, null, null, 0.81,
+ checkInst(model, 197, 197, LocalDate.of(2019, 7, 17), 194, 50.00, null, 0.81298267, 40.65, 249.20, null, 0.32, null, null, 0.80,
null);
- checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 195, 50.00, null, 0.81211548, 40.61, 199.47, null, 0.27, null, null, 0.54,
+ checkInst(model, 198, 198, LocalDate.of(2019, 7, 18), 195, 50.00, null, 0.81211548, 40.61, 199.47, null, 0.27, null, null, 0.53,
null);
- checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 196, 50.00, null, 0.81124922, 40.56, 149.68, null, 0.21, null, null, 0.33,
+ checkInst(model, 199, 199, LocalDate.of(2019, 7, 19), 196, 50.00, null, 0.81124922, 40.56, 149.68, null, 0.21, null, null, 0.32,
null);
- checkInst(model, 200, 200, LocalDate.of(2019, 7, 20), 197, 50.00, null, 0.81038388, 40.52, 99.84, null, 0.17, null, null, 0.16,
+ checkInst(model, 200, 200, LocalDate.of(2019, 7, 20), 197, 50.00, null, 0.81038388, 40.52, 99.84, null, 0.16, null, null, 0.16,
null);
checkInst(model, 201, 201, LocalDate.of(2019, 7, 21), 198, 50.00, null, 0.80951946, 40.48, 49.95, null, 0.11, null, null, 0.05,
null);
@@ -2192,19 +2192,19 @@ void testLessPayment_term10_discountFee50_netDisbursement450_pay40() {
50.00);
checkInst(model, 1, 1, LocalDate.of(2019, 1, 2), 0, 50.00, 40.00, 1.00000000, 40.00, 408.83, 417.07, 8.83, 7.07, -1.76, 41.17,
42.93);
- checkInst(model, 2, 2, LocalDate.of(2019, 1, 3), 1, 50.00, null, 0.98074794, 49.04, 375.25, null, 8.19, null, null, 34.74, null);
- checkInst(model, 3, 3, LocalDate.of(2019, 1, 4), 2, 50.00, null, 0.96186652, 48.09, 332.62, null, 7.37, null, null, 27.37, null);
- checkInst(model, 4, 4, LocalDate.of(2019, 1, 5), 3, 50.00, null, 0.94334860, 47.17, 289.15, null, 6.53, null, null, 20.84, null);
- checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 4, 50.00, null, 0.92518720, 46.26, 244.83, null, 5.68, null, null, 15.16, null);
- checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 5, 50.00, null, 0.90737544, 45.37, 199.63, null, 4.81, null, null, 10.35, null);
- checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 6, 50.00, null, 0.88990659, 44.50, 153.55, null, 3.92, null, null, 6.43, null);
- checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 7, 50.00, null, 0.87277405, 43.64, 106.56, null, 3.01, null, null, 3.42, null);
- checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 8, 50.00, null, 0.85597135, 42.80, 58.66, null, 2.09, null, null, 1.33, null);
- checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 9, 50.00, null, 0.83949214, 41.97, 9.81, null, 1.14, null, null, 0.19, null);
+ checkInst(model, 2, 2, LocalDate.of(2019, 1, 3), 1, 50.00, null, 0.98074794, 49.04, 375.25, null, 8.18, null, null, 34.75, null);
+ checkInst(model, 3, 3, LocalDate.of(2019, 1, 4), 2, 50.00, null, 0.96186652, 48.09, 332.62, null, 7.37, null, null, 27.38, null);
+ checkInst(model, 4, 4, LocalDate.of(2019, 1, 5), 3, 50.00, null, 0.94334860, 47.17, 289.15, null, 6.53, null, null, 20.85, null);
+ checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 4, 50.00, null, 0.92518720, 46.26, 244.83, null, 5.68, null, null, 15.17, null);
+ checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 5, 50.00, null, 0.90737544, 45.37, 199.63, null, 4.80, null, null, 10.37, null);
+ checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 6, 50.00, null, 0.88990659, 44.50, 153.55, null, 3.92, null, null, 6.45, null);
+ checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 7, 50.00, null, 0.87277405, 43.64, 106.56, null, 3.01, null, null, 3.44, null);
+ checkInst(model, 9, 9, LocalDate.of(2019, 1, 10), 8, 50.00, null, 0.85597135, 42.80, 58.66, null, 2.10, null, null, 1.34, null);
+ checkInst(model, 10, 10, LocalDate.of(2019, 1, 11), 9, 50.00, null, 0.83949214, 41.97, 9.81, null, 1.15, null, null, 0.19, null);
// The catch-up period earns exactly the 0.20 of fee the term left unearned, so the deferred balance closes on
// it
// rather than a cent short.
- checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 10, 10.00, null, 0.82333018, 8.24, 0.00, null, 0.19, null, null, 0.00, null);
+ checkInst(model, 11, 11, LocalDate.of(2019, 1, 12), 10, 10.00, null, 0.82333018, 8.23, 0.00, null, 0.19, null, null, 0.00, null);
}
@@ -2228,8 +2228,8 @@ void testExcessPayment_term10_discountFee50_netDisbursement450_pay110() {
checkInst(model, 2, 2, LocalDate.of(2019, 1, 3), 1, 50.00, null, 0.98074794, 49.04, 315.33, null, 7.03, null, null, 24.67, null);
checkInst(model, 3, 3, LocalDate.of(2019, 1, 4), 2, 50.00, null, 0.96186652, 48.09, 271.52, null, 6.19, null, null, 18.48, null);
checkInst(model, 4, 4, LocalDate.of(2019, 1, 5), 3, 50.00, null, 0.94334860, 47.17, 226.85, null, 5.33, null, null, 13.15, null);
- checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 4, 50.00, null, 0.92518720, 46.26, 181.31, null, 4.45, null, null, 8.70, null);
- checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 5, 50.00, null, 0.90737544, 45.37, 134.86, null, 3.56, null, null, 5.14, null);
+ checkInst(model, 5, 5, LocalDate.of(2019, 1, 6), 4, 50.00, null, 0.92518720, 46.26, 181.31, null, 4.46, null, null, 8.69, null);
+ checkInst(model, 6, 6, LocalDate.of(2019, 1, 7), 5, 50.00, null, 0.90737544, 45.37, 134.86, null, 3.55, null, null, 5.14, null);
checkInst(model, 7, 7, LocalDate.of(2019, 1, 8), 6, 50.00, null, 0.88990659, 44.50, 87.51, null, 2.65, null, null, 2.49, null);
checkInst(model, 8, 8, LocalDate.of(2019, 1, 9), 7, 50.00, null, 0.87277405, 43.64, 39.23, null, 1.72, null, null, 0.77, null);
// An overpaid loan has less left to close, so the final period bills only the 28.94 still outstanding.
@@ -2247,7 +2247,7 @@ void testApplyRateChange_sameDayAsDisburse() {
final ProjectedAmortizationScheduleModel model = generateModel();
model.applyRateChange(new BigDecimal("15"), EXPECTED_DISBURSEMENT_DATE, EXPECTED_DISBURSEMENT_DATE);
- assertFalse(model.rateSegments().isEmpty());
+ assertFalse(model.rateChanges().isEmpty());
assertTrue(model.effectiveTotalTerm() > 0, "effective total term should be positive");
}
@@ -2257,7 +2257,7 @@ void testApplyRateChange_8daysAfterDisburse() {
final LocalDate rateChangeDate = EXPECTED_DISBURSEMENT_DATE.plusDays(8);
model.applyRateChange(new BigDecimal("15"), rateChangeDate, rateChangeDate);
- assertFalse(model.rateSegments().isEmpty());
+ assertFalse(model.rateChanges().isEmpty());
assertTrue(model.effectiveTotalTerm() > 0, "effective total term should be positive");
}
@@ -2266,8 +2266,8 @@ void testApplyRateChange_twiceWithDateGap() {
final ProjectedAmortizationScheduleModel model = generateModel();
model.applyRateChange(new BigDecimal("15"), EXPECTED_DISBURSEMENT_DATE, EXPECTED_DISBURSEMENT_DATE);
- assertNotNull(model.rateSegments());
- assertFalse(model.rateSegments().isEmpty());
+ assertNotNull(model.rateChanges());
+ assertFalse(model.rateChanges().isEmpty());
final LocalDate secondChangeDate = EXPECTED_DISBURSEMENT_DATE.plusDays(8);
model.applyRateChange(new BigDecimal("11"), secondChangeDate, secondChangeDate);
@@ -2306,11 +2306,47 @@ void testApplyRateChange_pastEndOfTerm() {
// The schedule runs as far as the day reached, so a change dated past the original term takes effect on its own
// period rather than being clamped back onto the term's last day, where it would have re-rated nothing.
- assertFalse(model.rateSegments().isEmpty(), "should have a rate segment");
- assertEquals(250, model.rateSegments().getFirst().startDayIndex(), "segment must start on the period its effective date falls on");
+ assertFalse(model.rateChanges().isEmpty(), "should have a rate change");
+ assertEquals(EXPECTED_DISBURSEMENT_DATE.plusDays(250), model.rateChanges().getFirst().effectiveDate(),
+ "rate change must take effect on the day its effective date falls on");
assertTrue(model.effectiveTotalTerm() > originalTerm, "effective term should extend beyond base term");
}
+ /**
+ * A change cannot be slotted in ahead of ones already recorded: each is sized against the balance and unearned fee
+ * reached on its own day, so an earlier one moves both for every change after it. The caller is told rather than
+ * quietly handed a schedule with the later changes deleted, which is what dropping them used to do.
+ */
+ @Test
+ void testApplyRateChange_backdatedBehindAnExistingChangeIsRejected() {
+ final ProjectedAmortizationScheduleModel model = generateModel();
+ final LocalDate later = EXPECTED_DISBURSEMENT_DATE.plusDays(40);
+ model.applyRateChange(new BigDecimal("15"), later, later);
+
+ final LocalDate backdated = EXPECTED_DISBURSEMENT_DATE.plusDays(10);
+ final IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
+ () -> model.applyRateChange(new BigDecimal("11"), backdated, later));
+ assertTrue(thrown.getMessage().contains("ascending effective-date order"), "the message must name the precondition broken");
+
+ assertEquals(1, model.rateChanges().size(), "the change already recorded must survive the rejected call");
+ assertEquals(later, model.rateChanges().getFirst().effectiveDate());
+ assertEquals(0, model.rateChanges().getFirst().periodPaymentRate().compareTo(new BigDecimal("15")));
+ }
+
+ /** Booking twice on one day overwrites, rather than leaving the day carrying two rates. */
+ @Test
+ void testApplyRateChange_twiceOnTheSameDateOverwrites() {
+ final ProjectedAmortizationScheduleModel model = generateModel();
+ final LocalDate changeDate = EXPECTED_DISBURSEMENT_DATE.plusDays(10);
+
+ model.applyRateChange(new BigDecimal("15"), changeDate, changeDate);
+ model.applyRateChange(new BigDecimal("11"), changeDate, changeDate);
+
+ assertEquals(1, model.rateChanges().size(), "the day must carry one rate, not two");
+ assertEquals(0, model.rateChanges().getFirst().periodPaymentRate().compareTo(new BigDecimal("11")),
+ "the rate booked last is the one in force");
+ }
+
@Test
void testApplyRateChange_beforeDisburseDate() {
final ProjectedAmortizationScheduleModel model = generateModel();
@@ -2416,7 +2452,6 @@ void testOverpaidLoanProjectsNothingRatherThanUnEarningFee() {
model.acknowledgeElapsedPeriods(EXPECTED_DISBURSEMENT_DATE.plusDays(3));
model.applyPayment(EXPECTED_DISBURSEMENT_DATE.plusDays(3), new BigDecimal("46"));
model.applyPayment(EXPECTED_DISBURSEMENT_DATE.plusDays(1), new BigDecimal(overpayment));
- model.recalculateNetAmortizationAndDeferredBalanceFrom(EXPECTED_DISBURSEMENT_DATE.plusDays(1));
final List
+ * Every test here is a property the schedule must satisfy for any inputs, so none of them needs updating when a cent
+ * moves. They are what says the model is still correct; the golden schedules in
+ * {@link ProjectedAmortizationScheduleCalculatorTest} say only that it has not changed.
+ */
+class ProjectedAmortizationScheduleNormalizationTest {
+
+ private static final MathContext MC = MathContext.DECIMAL128;
+ private static final CurrencyData CURRENCY = new CurrencyData("USD", 2, null);
+ private static final BigDecimal TPV = new BigDecimal("100000");
+ private static final int DAY_COUNT = 360;
+ private static final LocalDate DISBURSEMENT = LocalDate.of(2026, 1, 1);
+ private static final BigDecimal CENT = new BigDecimal("0.01");
+
+ @BeforeEach
+ void setBusinessDate() {
+ ThreadLocalContextUtil.setTenant(new FineractPlatformTenant(1L, "default", "Default", "UTC", null));
+ ThreadLocalContextUtil.setActionContext(ActionContext.DEFAULT);
+ ThreadLocalContextUtil.setBusinessDates(new HashMap<>(Map.of(BusinessDateType.BUSINESS_DATE, DISBURSEMENT)));
+ }
+
+ @AfterEach
+ void resetContext() {
+ ThreadLocalContextUtil.reset();
+ }
+
+ private ProjectedAmortizationScheduleModel model(final String netDisbursement, final String discountFee, final String rate) {
+ return ProjectedAmortizationScheduleModel.generate(new BigDecimal(discountFee), new BigDecimal(netDisbursement), TPV,
+ new BigDecimal(rate), DAY_COUNT, DISBURSEMENT, MC, CURRENCY, DISBURSEMENT);
+ }
+
+ private static BigDecimal amount(final Money money) {
+ return money == null ? null : money.getAmount();
+ }
+
+ /**
+ * Every amount the schedule reports is payable in the loan currency. A figure carrying a third decimal is one no
+ * borrower can pay and no ledger can hold, and it is where a cent goes missing.
+ */
+ @Test
+ void everyReportedAmountIsAWholeNumberOfMinorUnits() {
+ for (final String rate : new String[] { "18", "17", "13", "7", "1.5" }) {
+ final ProjectedAmortizationScheduleModel model = model("9000", "1000", rate);
+ for (final ProjectedPayment payment : model.projectedPayments()) {
+ final String where = "rate " + rate + ", period " + payment.paymentNo() + ": ";
+ assertScaled(where + "expectedPaymentAmount", payment.expectedPaymentAmount());
+ assertScaled(where + "expectedBalance", payment.expectedBalance());
+ assertScaled(where + "expectedAmortizationAmount", payment.expectedAmortizationAmount());
+ assertScaled(where + "expectedDiscountFeeBalance", payment.expectedDiscountFeeBalance());
+ assertScaled(where + "actualBalance", payment.actualBalance());
+ assertScaled(where + "actualAmortizationAmount", payment.actualAmortizationAmount());
+ assertScaled(where + "actualDiscountFeeBalance", payment.actualDiscountFeeBalance());
+ }
+ }
+ }
+
+ private static void assertScaled(final String where, final Money money) {
+ if (money == null) {
+ return;
+ }
+ final BigDecimal value = money.getAmount();
+ assertEquals(0, value.compareTo(value.setScale(2, RoundingMode.UNNECESSARY)), where + " must be payable in the currency: " + value);
+ }
+
+ /**
+ * What the borrower really owes, and what the money received has really earned, are both ledgers - so both only
+ * ever fall, and neither goes below nothing.
+ *
+ *
+ * A payment cannot un-earn what an earlier one booked, and money once handed over cannot become owed again. Both
+ * hold unconditionally - across missed days, across restatements, and across a re-pricing - because both are
+ * records of money that came in rather than projections of money expected. The projected columns are not ledgers
+ * and are held to the weaker rule in
+ * {@link #theProjectedDeferredFeeFallsWhileTheRateStandsStillAndNeverGoesNegative}: a re-pricing changes what one
+ * day ahead looks like, so it moves them, whereas nothing but money moves these.
+ *
+ *
+ * The balance is the half of this that has gone wrong before: a rate change that re-priced the schedule from the
+ * disbursement rather than from the balance a repayment had already brought it down to reported the loan owing
+ * several hundred more the day after the change than the day before it, on a day no money moved at all.
+ */
+ @Test
+ void whatIsOwedAndWhatIsEarnedAreLedgersSoBothOnlyEverFall() {
+ for (final String rate : new String[] { "18", "17", "13" }) {
+ for (final Divergence divergence : divergencesIncludingNone()) {
+ final ProjectedAmortizationScheduleModel model = model("9000", "1000", rate);
+ if (divergence != null) {
+ divergence.applyTo(model);
+ }
+ BigDecimal previousDeferredFee = null;
+ BigDecimal previousOwed = null;
+ for (final ProjectedPayment payment : model.projectedPayments()) {
+ final String where = "rate " + rate + ", " + divergence + ", period " + payment.paymentNo() + ": ";
+
+ final BigDecimal deferredFee = amount(payment.actualDiscountFeeBalance());
+ if (deferredFee != null) {
+ assertTrue(deferredFee.signum() >= 0, where + "actualDiscountFeeBalance went negative: " + deferredFee);
+ if (previousDeferredFee != null) {
+ assertTrue(deferredFee.compareTo(previousDeferredFee) <= 0,
+ where + "actualDiscountFeeBalance rose from " + previousDeferredFee + " to " + deferredFee);
+ }
+ previousDeferredFee = deferredFee;
+ }
+
+ final BigDecimal owed = amount(payment.actualBalance());
+ if (owed != null) {
+ assertTrue(owed.signum() >= 0, where + "actualBalance went negative: " + owed);
+ if (previousOwed != null) {
+ assertTrue(owed.compareTo(previousOwed) <= 0,
+ where + "actualBalance rose from " + previousOwed + " to " + owed);
+ }
+ previousOwed = owed;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * The projected deferred fee falls for as long as the rate it is projected at stands still, and never goes below
+ * nothing.
+ *
+ *
+ * Only for as long as the rate stands still, because the expected columns are not a ledger: each day projects one
+ * day forward from what the borrower really owes, so the figure a day reports is a fresh projection rather than a
+ * running total the next day adds to. Two days either side of a re-pricing are therefore two different projections
+ * of the same position, and comparing them measures the rate change rather than anything the schedule did wrong - a
+ * rate cut deducts a smaller day's accrual from the same balance and so necessarily projects more fee still
+ * deferred. {@link #aRateCutRaisesTheProjectedDeferredFeeAndTheFeeStillClosesOnNothing} pins that as the intended
+ * behaviour; here the day it takes effect on is the one day the comparison is not made.
+ *
+ *
+ * Everywhere else the projection is comparable, and there it must only ever fall.
+ */
+ @Test
+ void theProjectedDeferredFeeFallsWhileTheRateStandsStillAndNeverGoesNegative() {
+ for (final String rate : new String[] { "18", "17", "13" }) {
+ for (final Divergence divergence : divergencesIncludingNone()) {
+ final ProjectedAmortizationScheduleModel model = model("9000", "1000", rate);
+ if (divergence != null) {
+ divergence.applyTo(model);
+ }
+ final Set
+ * This is the one the projected balance needs, and monotonicity is not it: a rate cut deducts a smaller instalment
+ * from the same balance and so legitimately reports a higher figure the day it takes effect, which means any rule
+ * about the direction of travel has to exempt exactly the day the damage would show. What cannot change is the
+ * balance being projected from - a rate change rewrites what is still to come, not what the borrower owes - and
+ * that is recoverable from any row as {@code balance - amortization + payment}.
+ *
+ *
+ * Re-pricing from the disbursement instead of from the balance a repayment had brought the loan down to is what
+ * went wrong before, and it reported several hundred more owed on the day of the change than the day before it.
+ * Measured this way that is a discontinuity in the balance projected from, whichever direction the figure moved.
+ */
+ @Test
+ void aRePricingMovesNoMoneySoTheBalanceItProjectsFromDoesNotMove() {
+ for (final String rate : new String[] { "18", "17", "13" }) {
+ for (final Divergence divergence : divergencesIncludingNone()) {
+ final ProjectedAmortizationScheduleModel model = model("9000", "1000", rate);
+ if (divergence != null) {
+ divergence.applyTo(model);
+ }
+ final Set
+ * Not a defect but the arithmetic of a one-day-ahead projection: the day before the cut deducts a day's accrual at
+ * the old rate from the balance the borrower really owes, the day of the cut deducts a smaller one from the same
+ * balance, and a smaller deduction leaves more deferred. Asserted rather than merely tolerated, so that a change
+ * which quietly stopped re-pricing the projection would be caught here instead of passing as a tidier column.
+ */
+ @Test
+ void aRateCutRaisesTheProjectedDeferredFeeAndTheFeeStillClosesOnNothing() {
+ final LocalDate repricedOn = DISBURSEMENT.plusDays(9);
+ for (final String netDisbursement : new String[] { "9000", "5000" }) {
+ for (final String[] cut : new String[][] { { "25", "11" }, { "18", "11" }, { "25", "18" } }) {
+ final ProjectedAmortizationScheduleModel model = model(netDisbursement, "1000", cut[0]);
+ Divergence.A_PART_PAYMENT_AFTER_A_MISSED_WEEK.applyTo(model);
+ model.applyRateChange(new BigDecimal(cut[1]), repricedOn, repricedOn);
+
+ final String where = "net " + netDisbursement + ", rate " + cut[0] + " cut to " + cut[1] + ": ";
+ final BigDecimal before = amount(feeBalanceOn(model, repricedOn.minusDays(1)));
+ final BigDecimal onTheDay = amount(feeBalanceOn(model, repricedOn));
+ assertTrue(onTheDay.compareTo(before) > 0,
+ where + "a rate cut must project more fee still deferred, not less: " + before + " -> " + onTheDay);
+
+ final ProjectedPayment closing = model.projectedPayments().getLast();
+ assertEquals(0, amount(closing.expectedDiscountFeeBalance()).signum(),
+ where + "the fee must still close on nothing: " + closing.expectedDiscountFeeBalance());
+ assertEquals(0, amount(closing.expectedBalance()).signum(),
+ where + "the schedule must still close on nothing: " + closing.expectedBalance());
+ }
+ }
+ }
+
+ private static Money feeBalanceOn(final ProjectedAmortizationScheduleModel model, final LocalDate date) {
+ return model.projectedPayments().stream().filter(payment -> payment.paymentNo() > 0 && payment.date().equals(date))
+ .map(ProjectedPayment::expectedDiscountFeeBalance).findFirst().orElseThrow();
+ }
+
+ /**
+ * The plain schedule alongside every way of diverging from it, so the seams reality is restated across - and the
+ * one a re-pricing introduces - are all covered.
+ */
+ private static List
+ * Every way of paying it is a different shape of schedule: a missed day restates the projection off a balance a
+ * little away from the plan, a part payment leaves it between two plan days, an overpayment closes it early.
+ */
+ @Test
+ void theDeferredFeeClosesOnNothingHoweverTheLoanIsPaid() {
+ for (final PaymentPattern pattern : PaymentPattern.values()) {
+ final ProjectedAmortizationScheduleModel model = model("9000", "1000", "17");
+ pattern.applyTo(model);
+ final List
+ * The two are one rule: every day asks for the instalment, capped at the balance there is to close, so a day
+ * billing less than the instalment is a day billing the last of the balance. Anything else is a day that
+ * under-bills and leaves a remainder for a further day to collect - which is a row the schedule did not need and a
+ * closing date a day later than the loan really closes.
+ *
+ *
+ * The restatements below are what put that at risk. They leave the balance on the day the rate was solved to close
+ * on higher than the remainder the plan predicted, and billing that stale remainder there strands the difference.
+ */
+ @Test
+ void aDayBillsTheWholeInstalmentUnlessItIsClosingTheLoan() {
+ for (final String rate : new String[] { "18", "17", "13" }) {
+ for (final String netDisbursement : new String[] { "9000", "5000", "450" }) {
+ for (final String discountFee : new String[] { "1000", "500", "0" }) {
+ for (final Divergence divergence : divergencesLeavingTheRateAlone()) {
+ final ProjectedAmortizationScheduleModel model = model(netDisbursement, discountFee, rate);
+ if (divergence != null) {
+ divergence.applyTo(model);
+ }
+ // Constant across the whole schedule because none of these divergences re-price it.
+ final BigDecimal instalment = amount(model.expectedPaymentAmount());
+ for (final ProjectedPayment payment : model.projectedPayments()) {
+ if (payment.paymentNo() == 0) {
+ continue;
+ }
+ final BigDecimal billed = amount(payment.expectedPaymentAmount());
+ if (billed.compareTo(instalment) >= 0) {
+ continue;
+ }
+ assertEquals(0, amount(payment.expectedBalance()).signum(),
+ "rate " + rate + ", net " + netDisbursement + ", fee " + discountFee + ", " + divergence + ", period "
+ + payment.paymentNo() + ": billed " + billed + " of a " + instalment
+ + " instalment while still owing " + payment.expectedBalance());
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /** Divergences that leave the rate alone, so one instalment governs every day of the schedule. */
+ private static List
+ * Two rules that look opposed and are not. Days merely elapsing are no reason to run on: the loan owes nothing, so
+ * every further day would bill nothing against nothing, and the last such row would date the loan's maturity to
+ * whenever the batch last ran rather than to the day it was repaid - a figure that is written onto the loan itself.
+ * Money arriving is a different matter: a payment on a loan already square is an overpayment, and the schedule has
+ * to run to the day it landed on to account for it.
+ */
+ @Test
+ void aClosedScheduleGrowsToReachMoneyButNotMerelyToReachToday() {
+ final ProjectedAmortizationScheduleModel repaidInFull = model("9000", "1000", "18");
+ repaidInFull.applyPayment(DISBURSEMENT.plusDays(1), new BigDecimal("10000"));
+ final int rowsOnClosing = repaidInFull.projectedPayments().size();
+ final LocalDate maturityOnClosing = repaidInFull.scheduledMaturityDate();
+
+ repaidInFull.acknowledgeElapsedPeriods(DISBURSEMENT.plusDays(120));
+
+ assertEquals(rowsOnClosing, repaidInFull.projectedPayments().size(),
+ "a repaid loan must not gain a row for every day the batch runs");
+ assertEquals(maturityOnClosing, repaidInFull.scheduledMaturityDate(), "nor may its maturity date walk forward with them");
+
+ final ProjectedAmortizationScheduleModel thenOverpaid = model("9000", "1000", "18");
+ thenOverpaid.applyPayment(DISBURSEMENT.plusDays(1), new BigDecimal("10000"));
+ thenOverpaid.applyPayment(DISBURSEMENT.plusDays(50), new BigDecimal("25"));
+
+ final LocalDate paidOn = DISBURSEMENT.plusDays(50);
+ assertTrue(
+ thenOverpaid.projectedPayments().stream()
+ .anyMatch(payment -> paidOn.equals(payment.date()) && payment.actualPaymentAmount() != null),
+ "but a payment landing after the loan closed must still have a day of its own");
+ }
+
+ /**
+ * What the loan is owed is what the days still to come are going to bill for.
+ *
+ *
+ * Both halves of that are recoverable from the schedule: what is owed is the last day anything is known about,
+ * balance plus fee still deferred; what will be billed is the sum of the expected payments of every day after it.
+ * They have to agree, or the schedule is showing a plan that collects the wrong amount.
+ *
+ *
+ * Agreeing is not automatic. The rate was solved so that its daily accruals sum to exactly the fee, on the balance
+ * the plan projected - and a borrower who paid differently leaves the days ahead running on a different balance,
+ * where those accruals sum to slightly less than the fee still unearned. The days would then bill a few cents under
+ * what is owed. Re-pricing the days ahead against the position really reached is what closes that, and this is the
+ * property it exists to hold.
+ */
+ @Test
+ void whatIsOwedIsWhatTheDaysStillToComeWillBill() {
+ for (final String rate : new String[] { "22", "18", "13" }) {
+ for (final String netDisbursement : new String[] { "9000", "3030", "450" }) {
+ for (final String discountFee : new String[] { "1000", "970", "50" }) {
+ for (final Divergence divergence : divergencesIncludingNone()) {
+ final ProjectedAmortizationScheduleModel model = model(netDisbursement, discountFee, rate);
+ if (divergence != null) {
+ divergence.applyTo(model);
+ }
+ final Optional
+ * Swept rather than sampled, because whether this holds turns on arithmetic no single fixture exposes: the last day
+ * of the solved term bills the closing remainder, a fraction of an instalment, and on a loan that has fallen behind
+ * that day arrives with the balance still far above it. Reading that fraction as what the loan can earn declared
+ * the schedule unclosable and ended it there, hundreds of currency units short - but only when the remainder
+ * happened to land below one day's fee. Every combination below closed on the day it was written, which is why the
+ * golden schedules never noticed.
+ */
+ @Test
+ void everyShapeOfLoanRunsUntilItIsSquare() {
+ for (final String rate : new String[] { "24", "18", "17", "13", "9", "1" }) {
+ for (final String netDisbursement : new String[] { "9000", "5000", "450" }) {
+ for (final String discountFee : new String[] { "1000", "500", "50", "0" }) {
+ for (final Divergence divergence : DELINQUENCIES) {
+ final ProjectedAmortizationScheduleModel model = model(netDisbursement, discountFee, rate);
+ divergence.applyTo(model);
+ final String where = "rate " + rate + ", net " + netDisbursement + ", fee " + discountFee + ", " + divergence
+ + ": ";
+ final ProjectedPayment closing = model.projectedPayments().getLast();
+ assertEquals(0, amount(closing.expectedBalance()).signum(),
+ where + "the schedule ended owing " + closing.expectedBalance());
+ assertEquals(0, amount(closing.expectedDiscountFeeBalance()).signum(),
+ where + "the schedule ended with fee still deferred: " + closing.expectedDiscountFeeBalance());
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Ways of diverging from the plan, stated in amounts small enough to leave any of the loans above still owing.
+ */
+ /** The divergences safe to apply to any loan the closure sweep builds, whatever its size, fee or rate. */
+ private static final List
+ * It must load rather than fail: the rate changes themselves live in {@code m_wc_loan_period_payment_rate_change},
+ * not here, so the schedule is restated from that table the next time anything writes the loan. What must not
+ * happen is the old field being read into the new one - the two have no fields in common, so every entry would come
+ * back empty and the walk would be handed a rate change with no date and no rate.
+ */
+ @Test
+ void readsAModelPersistedWithTheOldRateSegmentShape() {
+ final ProjectedAmortizationScheduleModel model = model();
+ final String legacyJson = parser.toJson(model).replace("\"rateChanges\":[]",
+ "\"rateSegments\":[{\"startDayIndex\":9,\"segmentTerm\":180,\"effectiveInterestRate\":0.001,"
+ + "\"expectedPaymentAmount\":40.00,\"netDisbursementAtSplit\":8000.00,\"discountAtSplit\":400.00,"
+ + "\"finalPaymentAmount\":20.00}]");
+ assertTrue(legacyJson.contains("rateSegments"), "the legacy fixture must carry the old field");
+ assertTrue(!legacyJson.contains("rateChanges"), "and must not carry the new one");
+
+ final ProjectedAmortizationScheduleModel restored = parser.fromJson(legacyJson, MC, CURRENCY);
+
+ assertNotNull(restored, "an old model must still load");
+ assertTrue(restored.rateChanges().isEmpty(), "the old shape must be ignored, not misread");
+ assertEquals(190, restored.projectedPayments().size() - 1, "the schedule rebuilds at the rate the loan was written with");
+ }
+
/** Models persisted before principal adjustments existed carry no such field and must still deserialize. */
@Test
void readsAModelPersistedWithoutPrincipalAdjustments() {
diff --git a/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanModelProcessingServiceTest.java b/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanModelProcessingServiceTest.java
new file mode 100644
index 00000000000..438f339d360
--- /dev/null
+++ b/fineract-working-capital-loan/src/test/java/org/apache/fineract/portfolio/workingcapitalloan/service/WorkingCapitalLoanModelProcessingServiceTest.java
@@ -0,0 +1,135 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.workingcapitalloan.service;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.util.List;
+import java.util.Optional;
+import org.apache.fineract.portfolio.loanaccount.domain.LoanStatus;
+import org.apache.fineract.portfolio.workingcapitalloan.calc.ProjectedAmortizationScheduleModel;
+import org.apache.fineract.portfolio.workingcapitalloan.domain.WorkingCapitalLoan;
+import org.apache.fineract.portfolio.workingcapitalloan.repository.ProjectedAmortizationLoanModelRepository;
+import org.apache.fineract.portfolio.workingcapitalloan.repository.WorkingCapitalLoanRepository;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+/**
+ * The version stamped on a stored model is only worth writing if something reads it. These cover that it is read, that
+ * the answer is the version now in force, and that a rebuild which cannot be made does not take its caller down.
+ */
+@ExtendWith(MockitoExtension.class)
+class WorkingCapitalLoanModelProcessingServiceTest {
+
+ private static final Long LOAN_ID = 4711L;
+
+ @Mock
+ private ProjectedAmortizationLoanModelRepository modelRepository;
+ @Mock
+ private WorkingCapitalLoanRepository loanRepository;
+ @Mock
+ private WorkingCapitalLoanAmortizationScheduleWriteService scheduleWriteService;
+ @Mock
+ private WorkingCapitalLoan loan;
+
+ @InjectMocks
+ private WorkingCapitalLoanModelProcessingService service;
+
+ @Test
+ void aModelStampedWithAnOlderVersionIsReportedAsNeedingARebuild() {
+ when(modelRepository.existsByLoanIdAndJsonModelVersionNot(LOAN_ID, ProjectedAmortizationScheduleModel.getModelVersion()))
+ .thenReturn(true);
+
+ assertTrue(service.requiresModelRecalculation(LOAN_ID), "a model written by an older version must be rebuilt before use");
+ }
+
+ @Test
+ void aModelStampedWithTheCurrentVersionIsLeftAlone() {
+ when(modelRepository.existsByLoanIdAndJsonModelVersionNot(anyLong(), anyString())).thenReturn(false);
+
+ assertFalse(service.requiresModelRecalculation(LOAN_ID), "nothing to do for a model already at the current version");
+ }
+
+ @Test
+ void theBatchQuestionIsAskedAgainstTheVersionNowInForceAndOnlyForRebuildableStatuses() {
+ when(modelRepository.findLoanIdsRequiringModelRecalculation(any(), any(), anyString())).thenReturn(List.of(LOAN_ID));
+
+ assertEquals(List.of(LOAN_ID), service.findLoanIdsRequiringModelRecalculation(List.of(LOAN_ID, 99L)));
+
+ @SuppressWarnings("unchecked")
+ final ArgumentCaptor
- * A cent may sit on a different day than in a schedule that rounds the cumulative total instead of accumulating
- * rounded periods - 8.92 / 8.88 here rather than 8.91 / 8.89 - but the two conventions agree on the cumulative
- * figure by day 6 (54.41), and every property asserted below holds under either. Do not "correct" a single day here
+ * These are the figures of a schedule that rounds its cumulative total rather than accumulating separately rounded
+ * days, which is the only convention the model has: a day's reported fee is the difference between two rounded
+ * totals. So a cent can sit a day either side of where per-day rounding would have put it - 8.92 / 8.88 here rather
+ * than 8.91 / 8.89 - while the cumulative figure by day 6 (54.41) is exact. Do not "correct" a single day here
* without checking the cumulative column along with it.
*/
private static final String[] EXPECTED_AMORTIZATION_OVERPAY = { "9.61", "9.04", "9.00", "8.96", "8.92", "8.88" };
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanRepaymentTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanRepaymentTest.java
index 5e39d4e6824..99a1e757755 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanRepaymentTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanRepaymentTest.java
@@ -432,207 +432,207 @@ private static void assertAmountOrNull(final ProjectedAmortizationSchedulePaymen
}
private static List
+ * The schedule normalizes a running total rather than each day, so what a day reports is the difference between two
+ * rounded totals. That is what keeps the fee from drifting away from itself over a few hundred days, and what these
+ * tests hold it to: the fee earned and the fee deferred always add up to the fee, the deferred balance only ever falls,
+ * and it closes on nothing.
+ *
+ *
+ * Working capital loans amortize the deferred fee on money in, never on time passed, so the schedule shortens when the
+ * borrower pays ahead and lengthens when a day goes by unpaid, and the fee closes either way.
+ */
+public class FeignWorkingCapitalLoanAmortizationNormalizationTest extends FeignIntegrationTest {
+
+ private static final String DISBURSEMENT_DATE = "01 January 2026";
+ private static final BigDecimal NET_DISBURSEMENT = new BigDecimal("9000");
+ private static final BigDecimal DISCOUNT_FEE = new BigDecimal("1000");
+ private static final BigDecimal PAYABLE = new BigDecimal("10000");
+ private static final BigDecimal RATE = new BigDecimal("17");
+
+ private FeignWorkingCapitalLoanHelper wcLoanHelper;
+ private FeignClientHelper clientHelper;
+ private FeignBusinessDateHelper businessDateHelper;
+ private WorkingCapitalLoanProductHelper productHelper;
+
+ private final List
+ * Which calendar day the schedule starts on depends on whether anything was repaid on the disbursement date: with a
+ * repayment there the first instalment falls on the disbursement date itself, without one it falls the day after.
+ * So undoing such a repayment shifts every day of the schedule back by one, and a change effective on the
+ * disbursement date no longer has a day of its own - it lands on the first instalment, alongside the change
+ * effective the day after it.
+ *
+ *
+ * The day must bill the rate in force on it, which is the later of the two. Taking the earlier one instead would
+ * have a superseded rate govern the first day and the live one start a day late, and since the schedule ahead is
+ * solved from the first day's balance, that re-prices every day after it rather than just the one.
+ */
+ @Test
+ void testRateChangesOnConsecutiveDaysCollapsingOntoOneKeepTheRateBookedLater() {
+ businessDateHelper.runAt("2026-01-01", () -> {
+ final Long clientForTest = clientHelper.createClient("01 January 2026");
+ final Long loanId = createAndDisburseLoanOnDate(clientForTest, BigDecimal.valueOf(9000), BigDecimal.valueOf(18),
+ "01 January 2026");
+
+ // A repayment on the disbursement date is what puts the first instalment on that date.
+ final Long disbursementDateRepayment = wcLoanHelper.makeRepayment(loanId,
+ WorkingCapitalLoanRequestBuilders.repayment(BigDecimal.valueOf(50), "01 January 2026"));
+ wcLoanHelper.updateRate(loanId, WorkingCapitalLoanRequestBuilders.updateRate(BigDecimal.valueOf(15), "01 January 2026"));
+
+ businessDateHelper.updateBusinessDate("BUSINESS_DATE", "2026-01-02");
+ wcLoanHelper.updateRate(loanId, WorkingCapitalLoanRequestBuilders.updateRate(BigDecimal.valueOf(13), "02 January 2026"));
+
+ // While the repayment stands the two changes have a day each: rate 15 bills 41.67, rate 13 bills 36.11.
+ final ListWhat runs the loop
Not a day count. The walk keeps going while the loan still owes something or the schedule
+ * has not yet caught up with the date it is being calculated to, and it stops when both are satisfied. A borrower
+ * paying exactly to plan closes on the day the rate was solved for, because that is what solving the rate against the
+ * real cash flow means. A borrower who overpays closes sooner and the schedule is shorter; one who misses a day closes
+ * later and it is longer. There is no separate run of catch-up days bolted onto the end, because the end is wherever
+ * the loan happens to close.
+ *
+ * Expected against actual
Both tracks are carried on every day. The expected track is the plan as it currently
+ * stands: it projects forward on the declining balance, and wherever reality is known - a payment landed, or a day went
+ * by with nothing on it - it is restated from that reality rather than from instalments it merely assumed. The actual
+ * track is what the money received has really earned, read off {@link PlanCursor}.
+ *
+ * Rounding
Nothing in here is rounded except through {@link #normalize}, and that rounds a running
+ * total, never a single day's figure. A day's reported share of the fee is the difference between two rounded
+ * totals, so it is always a whole number of minor units and the totals never drift from the high-precision figures they
+ * shadow. When the high-precision total reaches the discount fee, the normalized total is the discount fee - which is
+ * what lets the deferred fee balance close on nothing instead of a stray cent.
+ */
+@Slf4j
+final class AmortizationWalk {
+
+ private final BigDecimal netDisbursement;
+ private final BigDecimal discountFee;
+ private final BigDecimal totalPaymentVolume;
+ private final BigDecimal basePeriodPaymentRate;
+ private final int npvDayCount;
+ private final LocalDate expectedDisbursementDate;
+ private final int firstPeriodDayOffset;
+ private final LocalDate calculatedTillDate;
+ private final MapLifecycle
*
- *
*
- * Expected versus actual
+ * What this class holds
* Expected against actual
+ * > statuses = ArgumentCaptor.forClass(List.class);
+ verify(modelRepository).findLoanIdsRequiringModelRecalculation(any(), statuses.capture(),
+ eq(ProjectedAmortizationScheduleModel.getModelVersion()));
+ assertTrue(statuses.getValue().contains(LoanStatus.ACTIVE), "an active loan can be replayed");
+ assertTrue(statuses.getValue().contains(LoanStatus.CLOSED_OBLIGATIONS_MET), "so can one that has been repaid");
+ assertTrue(statuses.getValue().contains(LoanStatus.OVERPAID), "and one that was overpaid");
+ assertFalse(statuses.getValue().contains(LoanStatus.APPROVED), "but a loan with no schedule yet has nothing to replay");
+ }
+
+ @Test
+ void anEmptyBatchAsksTheDatabaseNothing() {
+ assertEquals(List.of(), service.findLoanIdsRequiringModelRecalculation(List.of()));
+ verify(modelRepository, never()).findLoanIdsRequiringModelRecalculation(any(), any(), anyString());
+ }
+
+ @Test
+ void aRebuildReplaysTheLoansRecordedHistory() {
+ when(loanRepository.findById(LOAN_ID)).thenReturn(Optional.of(loan));
+
+ service.recalculateModelAndSave(LOAN_ID);
+
+ verify(scheduleWriteService).rebuildScheduleModelFromRecordedHistory(loan);
+ }
+
+ /**
+ * The rebuild is a repair. A loan whose history no longer replays - a rate that stopped solving, say - keeps its
+ * stale model, and the batch that swept it up carries on to the others.
+ */
+ @Test
+ void aRebuildThatCannotBeMadeDoesNotFailTheCaller() {
+ when(loanRepository.findById(LOAN_ID)).thenReturn(Optional.of(loan));
+ doThrow(new IllegalStateException("EIR no longer solvable")).when(scheduleWriteService)
+ .rebuildScheduleModelFromRecordedHistory(loan);
+
+ service.recalculateModelAndSave(LOAN_ID);
+ }
+
+ @Test
+ void aLoanThatHasGoneAwayIsNotRebuilt() {
+ when(loanRepository.findById(LOAN_ID)).thenReturn(Optional.empty());
+
+ service.recalculateModelAndSave(LOAN_ID);
+
+ verify(scheduleWriteService, never()).rebuildScheduleModelFromRecordedHistory(any());
+ }
+}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanDiscountFeeAmortizationDriftTest.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanDiscountFeeAmortizationDriftTest.java
index 9484e44c860..04701f56ec4 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanDiscountFeeAmortizationDriftTest.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/WorkingCapitalLoanDiscountFeeAmortizationDriftTest.java
@@ -83,9 +83,10 @@ public class WorkingCapitalLoanDiscountFeeAmortizationDriftTest {
* fee whenever the day it belongs to is closed.
*
*