R/PortPassif-vieillissement_av_pb.R

#----------------------------------------------------------------------------------------------------------------------------------------------------
#           viellissement_av_pb
#----------------------------------------------------------------------------------------------------------------------------------------------------
##' Vieillissement du portefeuille sur l'annee avant attribution
##' de participation aux benefices.
##'
##' \code{viellissement_av_pb} est une methode permettant de vieillir l'objet \code{\link{PortPassif}}
##' sur l'annee avant attribution de participation aux benefices.
##' @name viellissement_av_pb
##' @docType methods
##' @param an une valeur \code{numeric} correspondant a l'annee de projection.
##' @param x un objet de la classe \code{\link{PortPassif}} contenant l'ensemble des produits de passifs.
##' @param coef_inf une valeur \code{numeric} correspondant au coefficient d'inflation
##'  considere pour le traitement des frais.
##' @param list_rd une liste contenant les rendements de reference. Le format de cette liste est :
##' \describe{
##' \item{le taux de rendement obligataire}{}
##' \item{le taux de rendement de l'indice action de reference}{}
##' \item{le taux de rendement de l'indice immobilier de reference}{}
##' \item{le taux de rendement de l'indice tresorerie de reference}{}
##' }
##' @param tx_soc une valeur \code{numeric} correspondant au taux de charges sociales.
##' @return Une liste comprenant  :
##' \describe{
##' \item{\code{ptf} : }{Le portefeuille \code{x} mis a jour.}
##' \item{\code{result_av_pb} : }{Une liste dont le premier element designe les noms des produits,
##'  puis deux matrices de resultats aggreges : une pour les flux et une pour le stock. Le format de cette sortie
##'  decoule de celui de la methode \code{\link{proj_annee_av_pb}}.}
##' \item{\code{result_autres_passifs} : }{un vecteur contenant les resultats des passifs non modelises.}
##' \item{\code{var_psap} : }{la variation de PSAP sur l'annee.}
##' \item{\code{var_pgg} : }{la variation de PGG sur l'annee.}
##' \item{\code{flux_milieu} : }{les flux de milieu d'annee entrant en tresorerie en milieu de periode.}
##' \item{\code{flux_fin} : }{les flux de fin d'annee entrant en tresorerie en fin de periode.}
##' }
##' @author Prim'Act
##' @seealso La projection des passifs sur un an avant PB : \code{\link{proj_annee_av_pb}}.
##' La projection des autres passifs : \code{\link{proj_annee_autres_passifs}}.
##' La mise a jour des autres reserves : \code{\link{update_reserves}}.
##' @export
##' @include PortPassif-class.R
##'
setGeneric(name = "viellissement_av_pb", def = function(an, x, coef_inf, list_rd, tx_soc) {
    standardGeneric("viellissement_av_pb")
})
setMethod(
    f = "viellissement_av_pb",
    signature = c(an = "integer", x = "PortPassif", coef_inf = "numeric", list_rd = "numeric", tx_soc = "numeric"),
    def = function(an, x, coef_inf, list_rd, tx_soc) {
        # Mise a jour de l'annee
        x@annee <- an

        #---------------------------------------------------------------
        # Etape 1 : Evaluation des flux et de PM avant PB sur les produits
        #---------------------------------------------------------------
        # Evaluation des flux et la PM avant PB
        result_av_pb <- proj_annee_av_pb(an, x, tx_soc, coef_inf, list_rd)

        # Mise a jour des tableaux de resultats intermediaires
        x <- result_av_pb[["x"]]

        # Extraction de donnees
        res_av_pb_flux_agg <- result_av_pb[["flux_agg"]]

        # Totaux
        prest_tot <- sum(res_av_pb_flux_agg[, "prest"])
        pm_av_pb_tot <- sum(result_av_pb[["stock_agg"]][, "pm_fin"])

        #---------------------------------------------------------------
        # Etape 2 : Evaluation des flux et de PM sur les produits hors modeles
        #---------------------------------------------------------------

        # Extraction des passifs hors modeles.
        result_autres_passifs <- proj_annee_autres_passifs(an, x@autres_passifs, coef_inf)

        #---------------------------------------------------------------
        # Etape 3 : Traitement de la PGG et de la PSAP
        #---------------------------------------------------------------

        # Evaluation et mise a jour de la PGG et de la PSAP.
        op_autres_reserves <- update_reserves(
            x@autres_reserves,
            prest_tot, result_autres_passifs$prestation,
            pm_av_pb_tot, result_autres_passifs$pm_fin
        )
        # Mise a jour des provisions
        x["autres_reserves"] <- op_autres_reserves[["x"]]

        #---------------------------------------------------------------
        # Etape 4 : Evaluation des besoins de financement des TMG
        #---------------------------------------------------------------

        # Evaluation du besoin pour le financement des TMG sur prestations et  stock
        res_av_pb_flux_agg <- cbind(res_av_pb_flux_agg,
            bes_tmg_prest = res_av_pb_flux_agg[, "rev_prest"] -
                res_av_pb_flux_agg[, "it_tech_prest"],
            bes_tmg_stock = result_av_pb[["flux_agg"]][, "rev_stock_brut"] -
                res_av_pb_flux_agg[, "it_tech_stock"]
        )

        #---------------------------------------------------------------
        # Etape 5 : Evaluation des flux interagissant avec l'actif
        #---------------------------------------------------------------
        # Calcul des flux de debut d'annee
        flux_debut <- -sum(res_av_pb_flux_agg[, "rach_mass"] - res_av_pb_flux_agg[, "rach_charg_mass"])

        # Calcul des flux de mileu d'annee
        flux_milieu <- sum(res_av_pb_flux_agg[, "pri_brut"] - # Primes
            ( # Prestations
                res_av_pb_flux_agg[, "rev_prest_nette"] +
                    res_av_pb_flux_agg[, "prest"] - res_av_pb_flux_agg[, "rach_mass"] -
                    (res_av_pb_flux_agg[, "rach_charg"] - res_av_pb_flux_agg[, "rach_charg_mass"]) -
                    res_av_pb_flux_agg[, "arr_charg"]
            ) - # Frais sur primes et sur prestations
            (
                res_av_pb_flux_agg[, "frais_var_prime"] +
                    res_av_pb_flux_agg[, "frais_fixe_prime"] +
                    res_av_pb_flux_agg[, "frais_var_prest"] +
                    res_av_pb_flux_agg[, "frais_fixe_prest"]
            ))

        # Ajout des flux hors modele
        flux_milieu <- flux_milieu +
            result_autres_passifs$prime -
            result_autres_passifs$prestation -
            # result_autres_passifs$it - # Interet technique deja inclus dans les prestations
            result_autres_passifs$frais


        # Calcul du flux de fin d'annee
        flux_fin <- -sum( # Frais sur encours
            res_av_pb_flux_agg[, "frais_var_enc"] +
                res_av_pb_flux_agg[, "frais_fixe_enc"]
        )


        # Mise a jour liste
        result_av_pb[["flux_agg"]] <- res_av_pb_flux_agg

        # Retrait des elements en doublon dans
        result_av_pb[["x"]] <- NULL
        nom_produit <- result_av_pb[["nom_produit"]]
        result_av_pb[["nom_produit"]] <- NULL

        # Output
        return(list(
            ptf = x,
            nom_produit = nom_produit,
            result_av_pb = result_av_pb,
            result_autres_passifs = result_autres_passifs,
            var_psap = op_autres_reserves[["var_psap"]], var_pgg = op_autres_reserves[["var_pgg"]],
            flux_debut = flux_debut,
            flux_milieu = flux_milieu, flux_fin = flux_fin
        ))
    }
)
qguibert/SimBEL documentation built on Sept. 5, 2023, 3:49 a.m.