import CotisationsSociales from "./cotisations-sociales" ; import ImpotRevenu from "./impot-revenu" ; import ImpotSociete from "./impot-societe" ; export default class Exercice { capital : number ; ca : number ; charges : number ; remuneration : number ; dividendes : number ; zfu : boolean = false ; pfu : boolean = false ; accre : boolean = false ; autresRevenus : number = 0 ; bnc : number = 0 ; nbParts : number = 1 ; nbMois : number = 12 ; forme : string = "EURL" ; tauxAccreCsSalaire = 0.35 ; tauxCsSalaire = 0.8185 ; plafondAccre = 39228 ; plancherAccreLineaire = this . plafondAccre * 0.75 ; tauxCsgCrds = 0.172 ; tauxAbattementDividendes = 0.4 ; tauxCsgDeductible = 0.051 ; tauxAbattementBnc = 0.34 ; tauxAbattementFrais = 0.1 ; tauxFlatTax = 0.3 ; ecoute ; constructor ( public impotSociete , public cotisations , public impotRevenu ) { } exercice ( ) { let res = { remuneration : { cotisationsSociales : 0 , brut : 0 , net : 0 , assietteIR : 0 } , dividendes : { cotisationsSociales : 0 , brut : 0 , assietteIR : 0 , net : 0 } , societe : { ca : 0 , charges : 0 } , IR : { } , IS : { } } ; res . IR . assiette = 0 ; res . IS . assiette = 0 ; res . dividendes . brut = this . dividendes ; res . autresRevenus = this . autresRevenus ; res . bnc = this . bnc ; res . remuneration . net = this . remuneration ; if ( this . forme === "EURL" ) { this . cotisations . remuneration = res . remuneration . net ; this . cotisations . accre = this . accre ; res . remuneration . cs = this . cotisations ; res . remuneration . cotisationsSociales = this . cotisations . getCotisations ( ) ; res . remuneration . brut = res . remuneration . net + res . remuneration . cotisationsSociales ; res . IR . assiette -= this . cotisations . getCsgCrds ( ) * this . tauxCsgDeductible ; } if ( this . forme === "SASU" ) { res . remuneration . cs = undefined ; let taux = this . accre && res . remuneration . net < this . plancherAccreLineaire ? this . tauxAccreCsSalaire : this . tauxCsSalaire ; res . remuneration . cotisationsSociales = res . remuneration . net * taux ; res . remuneration . brut = res . remuneration . net + res . remuneration . cotisationsSociales ; } res . remuneration . assietteIR = res . remuneration . net * ( 1 - this . tauxAbattementFrais ) ; res . IR . assiette += res . remuneration . assietteIR ; res . societe . ca = this . ca ; res . societe . charges = this . charges ; res . societe . brut = res . societe . ca - res . societe . charges - res . remuneration . brut ; res . IS . assiette = res . societe . brut ; this . impotSociete . benefice = res . IS . assiette ; this . impotSociete . prorata = this . nbMois / 12 ; if ( ! this . zfu ) { res . IS . exonerations = 0 ; res . IS . impot = this . impotSociete . getImpot ( ) ; } else { res . IS . exonerations = this . impotSociete . getImpot ( ) ; res . IS . impot = 0 ; } res . IS . tranches = this . impotSociete . getTranches ( ) ; res . societe . reste = res . societe . brut - res . IS . impot - res . dividendes . brut ; res . dividendes . supernet = 0 ; res . IR . impotPFU = 0 ; if ( this . dividendes > 0 ) { if ( this . forme === "SASU" ) { res . dividendes . cotisationsSociales = res . dividendes . brut * this . tauxCsgCrds ; if ( ! this . pfu ) { res . dividendes . net = res . dividendes . brut - res . dividendes . cotisationsSociales ; res . dividendes . assietteIR = res . dividendes . brut * ( 1 - this . tauxAbattementDividendes ) - res . dividendes . brut * this . tauxCsgDeductible ; } else { res . IR . impotPFU = res . dividendes . brut * ( this . tauxFlatTax - this . tauxCsgCrds ) ; res . dividendes . net = res . dividendes . brut - res . dividendes . cotisationsSociales - res . IR . impotPFU ; res . dividendes . assietteIR = 0 ; } } else { let dividendes10 = { } ; dividendes10 . brut = this . capital * 0.1 ; dividendes10 . cotisationsSociales = dividendes10 . brut * this . tauxCsgCrds ; dividendes10 . net = dividendes10 . brut - dividendes10 . cotisationsSociales ; res . dividendes . dividendes10 = dividendes10 ; let dividendes90 = { } ; dividendes90 . brut = res . dividendes . brut - dividendes10 . brut ; dividendes90 . cotisationsSociales = dividendes90 . brut * 0.45 ; dividendes90 . net = dividendes90 . brut - dividendes90 . cotisationsSociales ; res . dividendes . dividendes90 = dividendes90 ; res . dividendes . assietteIR = dividendes10 . brut * ( 1 - this . tauxAbattementDividendes ) - dividendes10 . brut * this . tauxCsgDeductible + dividendes90 . brut * ( 1 - this . tauxAbattementDividendes ) - dividendes90 . brut * this . tauxCsgDeductible ; res . dividendes . cotisationsSociales = dividendes10 . cotisationsSociales + dividendes90 . cotisationsSociales ; res . dividendes . net = dividendes10 . net + dividendes90 . net ; } res . IR . assiette += res . dividendes . assietteIR ; } res . IR . assiette += this . autresRevenus * ( 1 - this . tauxAbattementFrais ) ; res . IR . assiette += this . bnc * ( 1 - this . tauxAbattementBnc ) ; this . impotRevenu . revenu = res . IR . assiette ; this . impotRevenu . nbParts = this . nbParts ; res . IR . impot = this . impotRevenu . getImpot ( ) + res . IR . impotPFU ; res . IR . tranches = this . impotRevenu . getTranches ( ) ; res . brut = res . societe . ca - res . societe . charges - res . societe . reste + res . autresRevenus + res . bnc ; res . net = res . remuneration . net + res . dividendes . net + res . autresRevenus + res . bnc - res . IR . impot + res . IR . impotPFU ; return res ; } }