salaire : reformat + correction bug logé / nourri
This commit is contained in:
parent
5d2ffae186
commit
6db310efee
|
|
@ -1,284 +1,358 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RadioGroup, RadioItem, SlideToggle } from '@skeletonlabs/skeleton';
|
import { RadioGroup, RadioItem, SlideToggle } from '@skeletonlabs/skeleton';
|
||||||
import PlusMoins from './PlusMoins.svelte';
|
import PlusMoins from './PlusMoins.svelte';
|
||||||
import { recupBasesLegales } from './basesLegales';
|
import { recupBasesLegales } from './basesLegales';
|
||||||
import LigneSalaire from './LigneSalaire.svelte';
|
import LigneSalaire from './LigneSalaire.svelte';
|
||||||
|
|
||||||
let anneeInternat: string = '1re';
|
let anneeInternat: string = '1re';
|
||||||
let isLogé: boolean = false;
|
let isLogé: boolean = false;
|
||||||
let isNourri: boolean = true;
|
let isNourri: boolean = true;
|
||||||
let medGeOuSpe: string = "spe";
|
let medGeOuSpe: string = 'spe';
|
||||||
let aPrimeSaspas: boolean = false;
|
let aPrimeSaspas: boolean = false;
|
||||||
let aIndemnite15km: boolean = false;
|
let aIndemnite15km: boolean = false;
|
||||||
let aIndemniteZipZac: boolean = false;
|
let aIndemniteZipZac: boolean = false;
|
||||||
let estUltramarin: boolean = false;
|
let estUltramarin: boolean = false;
|
||||||
|
|
||||||
let nbDemiGardes: number = 0;
|
let nbDemiGardes: number = 0;
|
||||||
let nbGardesSem : number = 0;
|
let nbGardesSem: number = 0;
|
||||||
let nbGardesWE : number = 0;
|
let nbGardesWE: number = 0;
|
||||||
let nbAstreintes : number = 0;
|
let nbAstreintes: number = 0;
|
||||||
let nbDeplacements: number = 0;
|
let nbDeplacements: number = 0;
|
||||||
|
|
||||||
const annees = ['FFI', '1re', '2e', '3e', '4e', '5e', 'DJ1', 'DJ2'];
|
const annees = ['FFI', '1re', '2e', '3e', '4e', '5e', 'DJ1', 'DJ2'];
|
||||||
const bases = recupBasesLegales(2023, 10);
|
const bases = recupBasesLegales(2023, 10);
|
||||||
|
|
||||||
// Salaire de base et idemnités
|
// Salaire de base et idemnités
|
||||||
let base : number = 0;
|
let base: number = 0;
|
||||||
let indemniteSujetion : number = 0;
|
let indemniteSujetion: number = 0;
|
||||||
let indemniteSujetionLabel : string = "";
|
let indemniteSujetionLabel: string = '';
|
||||||
let indemniteSujetionRetraite : number = 0;
|
let indemniteSujetionRetraite: number = 0;
|
||||||
|
|
||||||
$: switch(anneeInternat) {
|
$: switch (anneeInternat) {
|
||||||
case "FFI":
|
case 'FFI':
|
||||||
base = parseFloat(bases.baseFFI) / 12;
|
base = parseFloat(bases.baseFFI) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.indemniteSujetion);
|
indemniteSujetion = parseFloat(bases.indemniteSujetion);
|
||||||
indemniteSujetionLabel = "Indemnité de sujetion";
|
indemniteSujetionLabel = 'Indemnité de sujetion';
|
||||||
indemniteSujetionRetraite = 0;
|
indemniteSujetionRetraite = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "1re":
|
case '1re':
|
||||||
base = parseFloat(bases.base1ere) / 12;
|
base = parseFloat(bases.base1ere) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.indemniteSujetion);
|
indemniteSujetion = parseFloat(bases.indemniteSujetion);
|
||||||
indemniteSujetionLabel = "Indemnité de sujetion";
|
indemniteSujetionLabel = 'Indemnité de sujetion';
|
||||||
indemniteSujetionRetraite = 0;
|
indemniteSujetionRetraite = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "2e":
|
case '2e':
|
||||||
base = parseFloat(bases.base2e) / 12;
|
base = parseFloat(bases.base2e) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.indemniteSujetion);
|
indemniteSujetion = parseFloat(bases.indemniteSujetion);
|
||||||
indemniteSujetionLabel = "Indemnité de sujetion";
|
indemniteSujetionLabel = 'Indemnité de sujetion';
|
||||||
indemniteSujetionRetraite = 0;
|
indemniteSujetionRetraite = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "3e":
|
case '3e':
|
||||||
base = parseFloat(bases.base3e) / 12;
|
base = parseFloat(bases.base3e) / 12;
|
||||||
indemniteSujetion = 0;
|
indemniteSujetion = 0;
|
||||||
indemniteSujetionLabel = "";
|
indemniteSujetionLabel = '';
|
||||||
indemniteSujetionRetraite = 0;
|
indemniteSujetionRetraite = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "4e":
|
case '4e':
|
||||||
base = parseFloat(bases.base4e) / 12;
|
base = parseFloat(bases.base4e) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.primeResp4eme) / 12;
|
indemniteSujetion = parseFloat(bases.primeResp4eme) / 12;
|
||||||
indemniteSujetionLabel = "Prime de responsabilité";
|
indemniteSujetionLabel = 'Prime de responsabilité';
|
||||||
indemniteSujetionRetraite = indemniteSujetion;
|
indemniteSujetionRetraite = indemniteSujetion;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "5e":
|
case '5e':
|
||||||
base = parseFloat(bases.base5e) / 12;
|
base = parseFloat(bases.base5e) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.primeResp5eme) / 12;
|
indemniteSujetion = parseFloat(bases.primeResp5eme) / 12;
|
||||||
indemniteSujetionLabel = "Prime de responsabilité";
|
indemniteSujetionLabel = 'Prime de responsabilité';
|
||||||
indemniteSujetionRetraite = indemniteSujetion;
|
indemniteSujetionRetraite = indemniteSujetion;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "DJ1":
|
case 'DJ1':
|
||||||
base = parseFloat(bases.baseDJ1) / 12;
|
base = parseFloat(bases.baseDJ1) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.primeDJ1re) / 12;
|
indemniteSujetion = parseFloat(bases.primeDJ1re) / 12;
|
||||||
indemniteSujetionLabel = "Prime d'autonomie supervisée";
|
indemniteSujetionLabel = "Prime d'autonomie supervisée";
|
||||||
indemniteSujetionRetraite = indemniteSujetion;
|
indemniteSujetionRetraite = indemniteSujetion;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "DJ2":
|
case 'DJ2':
|
||||||
base = parseFloat(bases.baseDJ2) / 12;
|
base = parseFloat(bases.baseDJ2) / 12;
|
||||||
indemniteSujetion = parseFloat(bases.primeDJ2eme) / 12;
|
indemniteSujetion = parseFloat(bases.primeDJ2eme) / 12;
|
||||||
indemniteSujetionLabel = "Prime d'autonomie supervisée";
|
indemniteSujetionLabel = "Prime d'autonomie supervisée";
|
||||||
indemniteSujetionRetraite = indemniteSujetion;
|
indemniteSujetionRetraite = indemniteSujetion;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.error("Année d'internat mal choisie");
|
console.error("Année d'internat mal choisie");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prime logé - nourri
|
// Prime logé - nourri
|
||||||
let primeLogeNourri : number = 0;
|
let primeLogeNourri: number = 0;
|
||||||
$: if (isNourri) {
|
$: if (!isNourri) {
|
||||||
if (isLogé) {
|
if (!isLogé) {
|
||||||
primeLogeNourri = parseFloat(bases.primeNonLogeNonNourri) / 12;
|
primeLogeNourri = parseFloat(bases.primeNonLogeNonNourri) / 12;
|
||||||
} else {
|
} else {
|
||||||
primeLogeNourri = parseFloat(bases.primeLogeNonNourri) / 12;
|
primeLogeNourri = parseFloat(bases.primeLogeNonNourri) / 12;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (isLogé) {
|
if (!isLogé) {
|
||||||
primeLogeNourri = parseFloat(bases.primeNonLogeNourri) / 12;
|
primeLogeNourri = parseFloat(bases.primeNonLogeNourri) / 12;
|
||||||
} else {
|
} else {
|
||||||
primeLogeNourri = 0;
|
primeLogeNourri = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prime SASPAS et indemnité transport et indemnité d'hébergement
|
// Prime SASPAS et indemnité transport et indemnité d'hébergement
|
||||||
$: primeSASPAS = (medGeOuSpe === "mg") && aPrimeSaspas ? parseFloat(bases.primeSASPAS) : 0;
|
$: primeSASPAS = medGeOuSpe === 'mg' && aPrimeSaspas ? parseFloat(bases.primeSASPAS) : 0;
|
||||||
$: indemniteTransport = (medGeOuSpe === "mg") && aIndemnite15km ? parseFloat(bases.indemniteDeplacement) : 0;
|
$: indemniteTransport =
|
||||||
$: indemniteHebergement = (medGeOuSpe === "mg") && aIndemniteZipZac ? parseFloat(bases.indemniteHebergement) : 0;
|
medGeOuSpe === 'mg' && aIndemnite15km ? parseFloat(bases.indemniteDeplacement) : 0;
|
||||||
|
$: indemniteHebergement =
|
||||||
|
medGeOuSpe === 'mg' && aIndemniteZipZac ? parseFloat(bases.indemniteHebergement) : 0;
|
||||||
|
|
||||||
// Prime Outremer
|
// Prime Outremer
|
||||||
$: tauxPrimeOutremer = estUltramarin ? parseFloat(bases.tauxPrimeOutremer) : 0;
|
$: tauxPrimeOutremer = estUltramarin ? parseFloat(bases.tauxPrimeOutremer) : 0;
|
||||||
|
|
||||||
// Gardes et astreintes
|
// Gardes et astreintes
|
||||||
$: valDemiGarde = parseFloat(bases.demigarde);
|
$: valDemiGarde = parseFloat(bases.demigarde);
|
||||||
$: valGardeSem = parseFloat(bases.gardeSem); // Pas de gestion des gardes au dela du service normal pour le moment
|
$: valGardeSem = parseFloat(bases.gardeSem); // Pas de gestion des gardes au dela du service normal pour le moment
|
||||||
$: valGardeWE = parseFloat(bases.gardeWE); // Pas de gestion des gardes au dela du service normal pour le moment
|
$: valGardeWE = parseFloat(bases.gardeWE); // Pas de gestion des gardes au dela du service normal pour le moment
|
||||||
$: valAstreinte = parseFloat(bases.astreinte);
|
$: valAstreinte = parseFloat(bases.astreinte);
|
||||||
$: valDeplacement = parseFloat(bases.deplaAstreinte);
|
$: valDeplacement = parseFloat(bases.deplaAstreinte);
|
||||||
|
|
||||||
// == TOTAL BRUT ==
|
// == TOTAL BRUT ==
|
||||||
$: totalBrut = base
|
$: totalBrut =
|
||||||
+ indemniteSujetion
|
base +
|
||||||
+ primeLogeNourri
|
indemniteSujetion +
|
||||||
+ primeSASPAS
|
primeLogeNourri +
|
||||||
+ indemniteTransport
|
primeSASPAS +
|
||||||
+ indemniteHebergement
|
indemniteTransport +
|
||||||
+ tauxPrimeOutremer * base / 100
|
indemniteHebergement +
|
||||||
+ nbDemiGardes * valDemiGarde
|
(tauxPrimeOutremer * base) / 100 +
|
||||||
+ nbGardesSem * valGardeSem
|
nbDemiGardes * valDemiGarde +
|
||||||
+ nbGardesWE * valGardeWE
|
nbGardesSem * valGardeSem +
|
||||||
+ nbAstreintes * valAstreinte
|
nbGardesWE * valGardeWE +
|
||||||
+ nbDeplacements * valDeplacement;
|
nbAstreintes * valAstreinte +
|
||||||
|
nbDeplacements * valDeplacement;
|
||||||
|
|
||||||
// Contribution sociale généralisée (CSG) et remboursement de la dette sociale (CRDS)
|
// Contribution sociale généralisée (CSG) et remboursement de la dette sociale (CRDS)
|
||||||
$: baseCsgRds = totalBrut * parseFloat(bases.assietteCSGCRDS);
|
$: baseCsgRds = totalBrut * parseFloat(bases.assietteCSGCRDS);
|
||||||
$: tauxCSGDeductible = parseFloat(bases.tauxCSGDeductible);
|
$: tauxCSGDeductible = parseFloat(bases.tauxCSGDeductible);
|
||||||
$: tauxCSGNonDeductible = parseFloat(bases.tauxCSGNonDeductible);
|
$: tauxCSGNonDeductible = parseFloat(bases.tauxCSGNonDeductible);
|
||||||
$: tauxCRDS = parseFloat(bases.tauxCRDS);
|
$: tauxCRDS = parseFloat(bases.tauxCRDS);
|
||||||
|
|
||||||
// Retraite IRCANTEC
|
// Retraite IRCANTEC
|
||||||
$: baseRetraite = (base + indemniteSujetionRetraite + indemniteTransport + indemniteHebergement + primeSASPAS) * 2/3;
|
$: baseRetraite =
|
||||||
$: plafondSS = parseFloat(bases.plafondSS);
|
((base + indemniteSujetionRetraite + indemniteTransport + indemniteHebergement + primeSASPAS) *
|
||||||
$: baseIrcantecA = (baseRetraite > plafondSS) ? plafondSS : baseRetraite;
|
2) /
|
||||||
$: baseIrcantecB = (baseRetraite > plafondSS) ? baseRetraite - plafondSS : 0;
|
3;
|
||||||
|
$: plafondSS = parseFloat(bases.plafondSS);
|
||||||
|
$: baseIrcantecA = baseRetraite > plafondSS ? plafondSS : baseRetraite;
|
||||||
|
$: baseIrcantecB = baseRetraite > plafondSS ? baseRetraite - plafondSS : 0;
|
||||||
|
|
||||||
$: tauxIrcantecA = parseFloat(bases.IRCANTECTrA);
|
$: tauxIrcantecA = parseFloat(bases.IRCANTECTrA);
|
||||||
$: tauxIrcantecB = parseFloat(bases.IRCANTECTrB);
|
$: tauxIrcantecB = parseFloat(bases.IRCANTECTrB);
|
||||||
|
|
||||||
// Sécurité sociale
|
// Sécurité sociale
|
||||||
$: basePlafonnee = (totalBrut > plafondSS) ? plafondSS : totalBrut;
|
$: basePlafonnee = totalBrut > plafondSS ? plafondSS : totalBrut;
|
||||||
$: tauxVieillessePlafonee = parseFloat(bases.tauxAssuranceViellessePlafonee);
|
$: tauxVieillessePlafonee = parseFloat(bases.tauxAssuranceViellessePlafonee);
|
||||||
$: tauxVieillesseDeplafonee = parseFloat(bases.tauxAssuranceViellesseDeplaf);
|
$: tauxVieillesseDeplafonee = parseFloat(bases.tauxAssuranceViellesseDeplaf);
|
||||||
|
|
||||||
// == TOTAL NET AVANT IMPOTS ==
|
// == TOTAL NET AVANT IMPOTS ==
|
||||||
$: totalNetFiscal = totalBrut
|
$: totalNetFiscal =
|
||||||
- baseCsgRds * tauxCSGDeductible / 100
|
totalBrut -
|
||||||
- baseIrcantecA * tauxIrcantecA / 100
|
(baseCsgRds * tauxCSGDeductible) / 100 -
|
||||||
- baseIrcantecB * tauxIrcantecB / 100
|
(baseIrcantecA * tauxIrcantecA) / 100 -
|
||||||
- totalBrut * tauxVieillesseDeplafonee / 100
|
(baseIrcantecB * tauxIrcantecB) / 100 -
|
||||||
- basePlafonnee * tauxVieillessePlafonee / 100;
|
(totalBrut * tauxVieillesseDeplafonee) / 100 -
|
||||||
$: totalNetAvantImpots = totalNetFiscal
|
(basePlafonnee * tauxVieillessePlafonee) / 100;
|
||||||
- baseCsgRds * tauxCSGNonDeductible / 100
|
$: totalNetAvantImpots =
|
||||||
- baseCsgRds * tauxCRDS / 100;
|
totalNetFiscal - (baseCsgRds * tauxCSGNonDeductible) / 100 - (baseCsgRds * tauxCRDS) / 100;
|
||||||
|
|
||||||
// Impots à la source
|
// Impots à la source
|
||||||
let tauxSource : number = 0;
|
let tauxSource: number = 0;
|
||||||
$: totalNet = totalNetAvantImpots - (totalNetFiscal * tauxSource / 100);
|
$: totalNet = totalNetAvantImpots - (totalNetFiscal * tauxSource) / 100;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{@debug base, totalBrut, totalNet}
|
{@debug base, totalBrut, totalNet}
|
||||||
|
|
||||||
<!-- ENTREES -->
|
<!-- ENTREES -->
|
||||||
<div class="grid gap-3 grid-cols-5 items-center">
|
<div class="grid gap-3 grid-cols-5 items-center">
|
||||||
<div>
|
<div>
|
||||||
<label class="label" for="dateSalaire"><span>Date d'effet</span></label>
|
<label class="label" for="dateSalaire"><span>Date d'effet</span></label>
|
||||||
<input id="dateSalaire" value="Date" disabled/>
|
<input id="dateSalaire" value="Date" disabled />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-3 overflow-x-auto flex">
|
<div class="col-span-3 overflow-x-auto flex">
|
||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<label class="label text-left pl-3" for="anneeInternat"><span>Année</span></label>
|
<label class="label text-left pl-3" for="anneeInternat"><span>Année</span></label>
|
||||||
<RadioGroup id="anneeInternat">
|
<RadioGroup id="anneeInternat">
|
||||||
{#each annees as a}
|
{#each annees as a}
|
||||||
<RadioItem bind:group={anneeInternat} name="anneeInternat" value={a}>{a}</RadioItem>
|
<RadioItem bind:group={anneeInternat} name="anneeInternat" value={a}>{a}</RadioItem>
|
||||||
{/each}
|
{/each}
|
||||||
</RadioGroup>
|
</RadioGroup>
|
||||||
</div>
|
</div>
|
||||||
<div class="grow" />
|
<div class="grow" />
|
||||||
|
</div>
|
||||||
</div>
|
<div class="flex flex-col gap-1">
|
||||||
<div class="flex flex-col gap-1">
|
<SlideToggle name="slider-logé" bind:checked={isLogé}>Logé</SlideToggle>
|
||||||
<SlideToggle name="slider-logé" bind:checked={isLogé}>Logé</SlideToggle>
|
<SlideToggle name="slider-nourri" bind:checked={isNourri}>Nourri</SlideToggle>
|
||||||
<SlideToggle name="slider-nourri" bind:checked={isNourri}>Nourri</SlideToggle>
|
</div>
|
||||||
</div>
|
<div class="col-span-2 flex flex-col gap-1">
|
||||||
<div class="col-span-2 flex flex-col gap-1">
|
<div class="grow pb-2 flex justify-left">
|
||||||
<div class="grow pb-2 flex justify-left">
|
<RadioGroup id="medGeOuSpe">
|
||||||
<RadioGroup id="medGeOuSpe">
|
<RadioItem bind:group={medGeOuSpe} name="medGeOuSpe" value="mg">Med Gé</RadioItem>
|
||||||
<RadioItem bind:group={medGeOuSpe} name="medGeOuSpe" value="mg">Med Gé</RadioItem>
|
<RadioItem bind:group={medGeOuSpe} name="medGeOuSpe" value="spe">Spé</RadioItem>
|
||||||
<RadioItem bind:group={medGeOuSpe} name="medGeOuSpe" value="spe">Spé</RadioItem>
|
</RadioGroup>
|
||||||
</RadioGroup>
|
</div>
|
||||||
</div>
|
<div class:invisible={medGeOuSpe === 'spe'} class="flex justify-left pl-3">
|
||||||
<div class:invisible={medGeOuSpe === "spe"} class="flex justify-left pl-3">
|
<SlideToggle name="slider-saspas" bind:checked={aPrimeSaspas}>SASPAS</SlideToggle>
|
||||||
<SlideToggle name="slider-saspas" bind:checked={aPrimeSaspas}>SASPAS</SlideToggle>
|
</div>
|
||||||
</div>
|
<div class:invisible={medGeOuSpe === 'spe'} class="flex justify-left pl-3">
|
||||||
<div class:invisible={medGeOuSpe === "spe"} class="flex justify-left pl-3">
|
<SlideToggle name="slider-15km" bind:checked={aIndemnite15km}>Stage > 15 km</SlideToggle>
|
||||||
<SlideToggle name="slider-15km" bind:checked={aIndemnite15km}>Stage > 15 km</SlideToggle>
|
</div>
|
||||||
</div>
|
<div class:invisible={medGeOuSpe === 'spe'} class="flex justify-left pl-3">
|
||||||
<div class:invisible={medGeOuSpe === "spe"} class="flex justify-left pl-3">
|
<SlideToggle name="slider-zipzac" bind:checked={aIndemniteZipZac}
|
||||||
<SlideToggle name="slider-zipzac" bind:checked={aIndemniteZipZac}>Indemnité hébergement</SlideToggle>
|
>Indemnité hébergement</SlideToggle
|
||||||
</div>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col gap-2">
|
</div>
|
||||||
<SlideToggle name="slider-outremer" bind:checked={estUltramarin}>Outremer</SlideToggle>
|
<div class="flex flex-col gap-2">
|
||||||
<PlusMoins bind:compteur={nbDemiGardes}>Demi-gardes</PlusMoins>
|
<SlideToggle name="slider-outremer" bind:checked={estUltramarin}>Outremer</SlideToggle>
|
||||||
</div>
|
<PlusMoins bind:compteur={nbDemiGardes}>Demi-gardes</PlusMoins>
|
||||||
<div class="flex flex-col gap-2">
|
</div>
|
||||||
<PlusMoins bind:compteur={nbGardesSem}>Gardes semaine</PlusMoins>
|
<div class="flex flex-col gap-2">
|
||||||
<PlusMoins bind:compteur={nbGardesWE}>Gardes WE & JF (12h)</PlusMoins>
|
<PlusMoins bind:compteur={nbGardesSem}>Gardes semaine</PlusMoins>
|
||||||
</div>
|
<PlusMoins bind:compteur={nbGardesWE}>Gardes WE & JF (12h)</PlusMoins>
|
||||||
<div class="flex flex-col gap-2">
|
</div>
|
||||||
<PlusMoins bind:compteur={nbAstreintes}>Astreintes (12h)</PlusMoins>
|
<div class="flex flex-col gap-2">
|
||||||
<PlusMoins bind:compteur={nbDeplacements}>Déplacements</PlusMoins>
|
<PlusMoins bind:compteur={nbAstreintes}>Astreintes (12h)</PlusMoins>
|
||||||
</div>
|
<PlusMoins bind:compteur={nbDeplacements}>Déplacements</PlusMoins>
|
||||||
<div class="col-span-5 flex flex-col md:flex-row">
|
</div>
|
||||||
<span>Taux de prélèvement à la source : {tauxSource} %</span>
|
<div class="col-span-5 flex flex-col md:flex-row">
|
||||||
<input type="range" bind:value={tauxSource} max="20" step="0.5"/>
|
<span>Taux de prélèvement à la source : {tauxSource} %</span>
|
||||||
</div>
|
<input type="range" bind:value={tauxSource} max="20" step="0.5" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- BULLETIN DE SALAIRE -->
|
<!-- BULLETIN DE SALAIRE -->
|
||||||
<div class="ficheSalaire flex flex-col bg-surface-700 font-mono">
|
<div class="ficheSalaire flex flex-col bg-surface-700 font-mono">
|
||||||
<div class="grow flex text-center bg-surface-600 px-1 font-bold">
|
<div class="grow flex text-center bg-surface-600 px-1 font-bold">
|
||||||
<div class="grow text-left"> Description</div>
|
<div class="grow text-left"> Description</div>
|
||||||
<div class="flex-none w-24">Base</div>
|
<div class="flex-none w-24">Base</div>
|
||||||
<div class="flex-none w-16">Nb/Taux</div>
|
<div class="flex-none w-16">Nb/Taux</div>
|
||||||
<div class="flex-none w-24">Total</div>
|
<div class="flex-none w-24">Total</div>
|
||||||
</div>
|
</div>
|
||||||
<LigneSalaire type="brut" label="Traitement de base" base={base} />
|
<LigneSalaire type="brut" label="Traitement de base" {base} />
|
||||||
|
|
||||||
<LigneSalaire type="taux" label="Prime outremer" opt={true} base={base} taux={tauxPrimeOutremer} />
|
<LigneSalaire type="taux" label="Prime outremer" opt={true} {base} taux={tauxPrimeOutremer} />
|
||||||
<LigneSalaire type="brut" label={indemniteSujetionLabel} opt={true} base={indemniteSujetion} />
|
<LigneSalaire type="brut" label={indemniteSujetionLabel} opt={true} base={indemniteSujetion} />
|
||||||
<LigneSalaire type="brut" label="Logé / Nourri" opt={true} base={primeLogeNourri} />
|
<LigneSalaire type="brut" label="Logé / Nourri" opt={true} base={primeLogeNourri} />
|
||||||
<LigneSalaire type="brut" label="Prime de responsabilité SASPAS" opt={true} base={primeSASPAS} />
|
<LigneSalaire type="brut" label="Prime de responsabilité SASPAS" opt={true} base={primeSASPAS} />
|
||||||
<LigneSalaire type="brut" label="Indemnité de transport > 15 km" opt={true} base={indemniteTransport} />
|
<LigneSalaire
|
||||||
<LigneSalaire type="brut" label="Indemnité d'hébergement (ZIP/ZAC)" opt={true} base={indemniteHebergement} />
|
type="brut"
|
||||||
|
label="Indemnité de transport > 15 km"
|
||||||
|
opt={true}
|
||||||
|
base={indemniteTransport}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="brut"
|
||||||
|
label="Indemnité d'hébergement (ZIP/ZAC)"
|
||||||
|
opt={true}
|
||||||
|
base={indemniteHebergement}
|
||||||
|
/>
|
||||||
|
|
||||||
<LigneSalaire type="nombre" label="Demi-garde" opt={true} base={valDemiGarde} nombre={nbDemiGardes} />
|
<LigneSalaire
|
||||||
<LigneSalaire type="nombre" label="Garde de semaine (12h)" opt={true} base={valGardeSem} nombre={nbGardesSem} />
|
type="nombre"
|
||||||
<LigneSalaire type="nombre" label="Garde de week-end (12h)" opt={true} base={valGardeWE} nombre={nbGardesWE} />
|
label="Demi-garde"
|
||||||
<LigneSalaire type="nombre" label="Astreinte" opt={true} base={valAstreinte} nombre={nbAstreintes} />
|
opt={true}
|
||||||
<LigneSalaire type="nombre" label="Déplacement sur astreinte" opt={true} base={valDeplacement} nombre={nbDeplacements} />
|
base={valDemiGarde}
|
||||||
|
nombre={nbDemiGardes}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="nombre"
|
||||||
|
label="Garde de semaine (12h)"
|
||||||
|
opt={true}
|
||||||
|
base={valGardeSem}
|
||||||
|
nombre={nbGardesSem}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="nombre"
|
||||||
|
label="Garde de week-end (12h)"
|
||||||
|
opt={true}
|
||||||
|
base={valGardeWE}
|
||||||
|
nombre={nbGardesWE}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="nombre"
|
||||||
|
label="Astreinte"
|
||||||
|
opt={true}
|
||||||
|
base={valAstreinte}
|
||||||
|
nombre={nbAstreintes}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="nombre"
|
||||||
|
label="Déplacement sur astreinte"
|
||||||
|
opt={true}
|
||||||
|
base={valDeplacement}
|
||||||
|
nombre={nbDeplacements}
|
||||||
|
/>
|
||||||
|
|
||||||
<div class="grow flex bg-surface-600 px-1 font-bold">
|
<div class="grow flex bg-surface-600 px-1 font-bold">
|
||||||
<div class="grow text-left"> TOTAL BRUT</div>
|
<div class="grow text-left"> TOTAL BRUT</div>
|
||||||
<div class="flex-none w-24 text-right">{totalBrut.toFixed(2)}</div>
|
<div class="flex-none w-24 text-right">{totalBrut.toFixed(2)}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<LigneSalaire type="taux" label="CSG déductible" base={baseCsgRds} taux={-tauxCSGDeductible} />
|
<LigneSalaire type="taux" label="CSG déductible" base={baseCsgRds} taux={-tauxCSGDeductible} />
|
||||||
<LigneSalaire type="taux" label="CSG non déductible" base={baseCsgRds} taux={-tauxCSGNonDeductible} />
|
<LigneSalaire
|
||||||
<LigneSalaire type="taux" label="C(RDS)" base={baseCsgRds} taux={-tauxCRDS} />
|
type="taux"
|
||||||
<LigneSalaire type="taux" label="IRCANTEC tranche A" base={baseIrcantecA} taux={-tauxIrcantecA} />
|
label="CSG non déductible"
|
||||||
<LigneSalaire type="taux" label="IRCANTEC tranche B" opt={true} base={baseIrcantecB} taux={-tauxIrcantecB} />
|
base={baseCsgRds}
|
||||||
<LigneSalaire type="taux" label="S.S Vieillesse déplafonnée" base={baseRetraite} taux={-tauxVieillesseDeplafonee} />
|
taux={-tauxCSGNonDeductible}
|
||||||
<LigneSalaire type="taux" label="S.S Vieillesse plafonnée" base={basePlafonnee} taux={-tauxVieillessePlafonee} />
|
/>
|
||||||
|
<LigneSalaire type="taux" label="C(RDS)" base={baseCsgRds} taux={-tauxCRDS} />
|
||||||
|
<LigneSalaire type="taux" label="IRCANTEC tranche A" base={baseIrcantecA} taux={-tauxIrcantecA} />
|
||||||
|
<LigneSalaire
|
||||||
|
type="taux"
|
||||||
|
label="IRCANTEC tranche B"
|
||||||
|
opt={true}
|
||||||
|
base={baseIrcantecB}
|
||||||
|
taux={-tauxIrcantecB}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="taux"
|
||||||
|
label="S.S Vieillesse déplafonnée"
|
||||||
|
base={baseRetraite}
|
||||||
|
taux={-tauxVieillesseDeplafonee}
|
||||||
|
/>
|
||||||
|
<LigneSalaire
|
||||||
|
type="taux"
|
||||||
|
label="S.S Vieillesse plafonnée"
|
||||||
|
base={basePlafonnee}
|
||||||
|
taux={-tauxVieillessePlafonee}
|
||||||
|
/>
|
||||||
|
|
||||||
{#if tauxSource}
|
{#if tauxSource}
|
||||||
<div class="grow flex bg-surface-600 px-1 font-bold">
|
<div class="grow flex bg-surface-600 px-1 font-bold">
|
||||||
<div class="grow text-left"> TOTAL NET AVANT IMPOTS</div>
|
<div class="grow text-left"> TOTAL NET AVANT IMPOTS</div>
|
||||||
<div class="flex-none w-24 text-right">{totalNetAvantImpots.toFixed(2)}</div>
|
<div class="flex-none w-24 text-right">{totalNetAvantImpots.toFixed(2)}</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<LigneSalaire type="taux" label="Prélèvement à la source" opt={true} base={totalNetFiscal} taux={-tauxSource} />
|
<LigneSalaire
|
||||||
|
type="taux"
|
||||||
|
label="Prélèvement à la source"
|
||||||
|
opt={true}
|
||||||
|
base={totalNetFiscal}
|
||||||
|
taux={-tauxSource}
|
||||||
|
/>
|
||||||
|
|
||||||
<div class="grow flex bg-surface-600 px-1 font-bold">
|
<div class="grow flex bg-surface-600 px-1 font-bold">
|
||||||
<div class="grow text-left"> TOTAL NET</div>
|
<div class="grow text-left"> TOTAL NET</div>
|
||||||
<div class="flex-none w-24 text-right">{totalNet.toFixed(2)}</div>
|
<div class="flex-none w-24 text-right">{totalNet.toFixed(2)}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue