<script lang="ts">
import { ppmt } from 'financial'
// V3
export let dette: number
// V4
export let taux: number
// Z8
export let duree: number
// Z7
export let dureeDifferee = 1
// V8
export let nombrePeriodesParAn = 12
let prorataPeriodique = 1 / nombrePeriodesParAn
// V6
let dureeAns = duree / nombrePeriodesParAn
let dureeAns_ = Math.ceil(dureeAns)
export let remboursement = new Array(duree + 1)
export let remboursementAnnuel = new Array(dureeAns_)
export let crd = new Array(duree + 1)
export let crdAnnuel = new Array(dureeAns_)
export let interets = new Array(duree + 1)
export let interetsAnnuels = new Array(dureeAns_)
$: {
dureeAns = duree / nombrePeriodesParAn
dureeAns_ = Math.ceil(dureeAns)
prorataPeriodique = 1 / nombrePeriodesParAn
// V10
let nombreEcheancesPeriodeTronquee = dureeAns * nombrePeriodesParAn
// V9
let nombreEcheances = Math.ceil(nombreEcheancesPeriodeTronquee)
// W11
let totalPeriodes = (dureeAns * nombrePeriodesParAn) - dureeDifferee
// X11
let periodeRemboursementCapital = dureeDifferee
remboursement = new Array(duree + 1)
crd = new Array(duree + 1)
interets = new Array(duree + 1)
remboursementAnnuel = new Array(dureeAns_)
crdAnnuel = new Array(dureeAns_)
interetsAnnuels = new Array(dureeAns_)
crd[0] = dette
remboursement[0] = 0
interets[0] = 0
crdAnnuel[0] = dette
remboursementAnnuel[0] = 0
interetsAnnuels[0] = 0
for(let i = 1; i <= duree; i++) {
if(i <= periodeRemboursementCapital) {
remboursement[i] = 0
} else if (i < nombreEcheancesPeriodeTronquee) {
remboursement[i] = ppmt(
taux * prorataPeriodique,
i - periodeRemboursementCapital,
totalPeriodes,
-dette,
)
} else if (i == nombreEcheances) {
remboursement[i] = crd[i-1]
} else {
remboursement[i] = 0
}
crd[i] = crd[i-1] - remboursement[i]
interets[i] = crd[i-1] * taux * prorataPeriodique
if((i % nombrePeriodesParAn) == 0) {
crdAnnuel[i/nombrePeriodesParAn] = crd[i]
remboursementAnnuel[i/nombrePeriodesParAn] = 0
interetsAnnuels[i/nombrePeriodesParAn] = 0
}
remboursementAnnuel[Math.floor(i/nombrePeriodesParAn)] += remboursement[i]
interetsAnnuels[Math.floor(i/nombrePeriodesParAn)] += interets[i]
}
}
let annuel = true
</script>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" role="switch" id="annuel" bind:checked={annuel}>
<label class="form-check-label" for="annuel">Présentation annuelle</label>
</div>
{#if annuel}
<div class="my-3">
<table class="table">
<thead>
<tr>
<th>Année</th>
<th>Capital restant dû</th>
<th>Principal</th>
<th>Intérêts</th>
</tr>
</thead>
<tbody>
{#each remboursementAnnuel as r, periode}
<tr>
<td>{periode}</td>
<td>{crdAnnuel[periode].toFixed(0)}</td>
<td>{r.toFixed(0)}</td>
<td>{interetsAnnuels[periode].toFixed(0)}</td>
</tr>
{/each}
</tbody>
</table>
</div>
{:else}
<div class="my-3">
<table class="table">
<thead>
<tr>
<th>Mois</th>
<th>Capital restant dû</th>
<th>Principal</th>
<th>Intérêts</th>
</tr>
</thead>
<tbody>
{#each remboursement as r, periode}
<tr>
<td>{periode}</td>
<td>{crd[periode].toFixed(0)}</td>
<td>{r.toFixed(0)}</td>
<td>{#if periode > 0}
{interets[periode].toFixed(0)}
{/if}
</td>
</tr>
{/each}
</tbody>
</table>
</div>
{/if}