Пример #1
0
        /*    int Uddannelseshjælp(Education ig)
         *  {
         *    if (ig == Education.IkkeUnderUddannelse)
         *      return Kontanthjælp();
         *    else
         *      return SU();
         *  }*/

        /// <summary>
        /// Beregner folkepensionsudbetaling
        /// </summary>
        /// <param name="år"></param>
        /// <param name="alder"></param>
        /// <param name="årIDK"></param>
        /// <param name="arbejdsindtægt">Arbejdsindtægt ved personligt arbejde. Det vil sige, at pensionsindtægter, renteindtægter og en eventuel ægtefælles indtægter ikke medgår i beregningen. Det gør folkepensionen og ATP heller ikke. Honorarer og mødediæter anses for indtægt ved personligt arbejde.</param>
        /// <param name="danskIndfødsret"></param>
        /// <returns></returns>
        public static int Folkepension(int år, int alder, int årIDK, CivilstandPensionist civilstand, int arbejdsindtægt, int samletIndtægt, int samleverIndkomst = 0, Boolean samleverPensionist = false, Boolean danskIndfødsret = true)
        {
            int født = år - alder;

            int folkepensionsalder;

            if (født < 1954)
            {
                folkepensionsalder = 65;
            }
            else if (født < 1955)
            {
                folkepensionsalder = 66;
            }
            else
            {
                folkepensionsalder = 67;
            }

            //krav:
            if (alder < folkepensionsalder || !danskIndfødsret) //dansk bopæl tages for givet
            {
                return(0);
            }

            int folkepension;

            int grundbeløb = Satser.fpGrundbeløb();
            int pensionstillæg;

            if (civilstand == CivilstandPensionist.Enlig || civilstand == CivilstandPensionist.ReeltEnlig)
            {
                int fradragsbeløb = Satser.fpFradragvTillægEnlig();

                pensionstillæg = Satser.fpPensionstillægEnlige(); //før evt nedsættelse
                int fradrag = Math.Max(0, Math.Min(arbejdsindtægt, Satser.fpFradragvArbejde())) + fradragsbeløb;

                double reduktionsgrad = civilstand == CivilstandPensionist.Enlig ? 0.32 : 0.309;

                int nedsættelse = Convert.ToInt32(Math.Max(0, (samletIndtægt - fradrag) * reduktionsgrad)); //Der foretages fratræk med 30,9% af din indtægt der overstiger [fradrag] kroner pr. år.
                pensionstillæg = Math.Max(0, pensionstillæg - nedsættelse);
            }
            else
            { //samlevende og gifte
                int fradragsbeløb = Satser.fpFradragvTillægPar();

                pensionstillæg = Satser.fpPensionstillægPar();

                int samleverIndkomstIndgåriBeregning;
                if (samleverPensionist)
                {
                    samleverIndkomstIndgåriBeregning = samleverIndkomst;
                }
                else
                {                                                                                            //hvis ægtefælle ikke er pensionist gives et fradrag
                    if (samleverIndkomst > Satser.fpFradragSamlever())                                       //For en pensionist, der er gift/samlevende med en person, der ikke modtager social pension, ...
                    {
                        samleverIndkomstIndgåriBeregning  = Satser.fpFradragSamlever() / 2;                  //...fradrages halvdelen af ægtefællens/samleverens indtægter op til 201.100 kr.
                        samleverIndkomstIndgåriBeregning += (samleverIndkomst - Satser.fpFradragSamlever()); // Indtægt derover indgår fuldt ud i beregningen.
                    }
                    else
                    {
                        samleverIndkomstIndgåriBeregning = samleverIndkomst / 2;
                    }
                }

                int    fradrag            = Math.Max(0, Math.Min(arbejdsindtægt, Satser.fpFradragvArbejde())) + fradragsbeløb;
                int    beregningsgrundlag = Math.Max(0, (samletIndtægt + samleverIndkomstIndgåriBeregning - fradrag));
                double reduktionsgrad     = samleverPensionist ? 0.16 : 0.32;
                int    nedsættelse        = Convert.ToInt32(beregningsgrundlag * reduktionsgrad);
                pensionstillæg = Math.Max(0, pensionstillæg - nedsættelse);
            }

            int fpFradragvGrundbeløb = Satser.fpFradragvGrundbeløb();

            if (arbejdsindtægt > fpFradragvGrundbeløb)
            {
                int nedsættelse = Convert.ToInt32(0.3 * Convert.ToDouble(arbejdsindtægt - fpFradragvGrundbeløb)); //...af grundbeløb, hvis arbejdsindtægt > [291.200]
                grundbeløb -= nedsættelse;
            }

            folkepension = grundbeløb + pensionstillæg;

            double brøkpension = Math.Max(1, årIDK / 40); //evt. brøkpension

            return(Convert.ToInt32(folkepension * brøkpension) / 12);

            //Ikke implementeret:
            //Opsat pension
            //Helbredstillæg
            //Supplerende pensionsydelse
            //Personlige tillæg
        }