Skip to content

Commit

Permalink
enhanced interactivity, asking for user's birth date
Browse files Browse the repository at this point in the history
  • Loading branch information
ObjectIsAdvantag committed Jan 29, 2016
1 parent 9c02fb5 commit 244360d
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 48 deletions.
66 changes: 57 additions & 9 deletions bilan.go
Expand Up @@ -30,7 +30,11 @@ func (infos InfosUser) sansRelevé() bool {
func main() {
// Interroge l'utilisateur
log.Debugln("Demande des informations : start")
userData, _ := interrogerUtilisateur()
userData, err := interrogerUtilisateur()
if err != nil {
log.Errorf("Données incorrectes, le bilan ne peut être généré, essayez à nouveau...")
os.Exit(-1)
}
log.Debugln("Demande des informations : ok! ", userData.Naissance, userData.DateRelevé, userData.TrimestresCotisés)

// Calcule les données de départ en retraite
Expand All @@ -48,10 +52,46 @@ func main() {
log.Debugln("Génération du bilan : ok!")
}

// Première implémentation statique
// Demande à l'utilisateur sa date de naissance à minima, ainsi que qq informations de son relevé de carrière
// Une erreur est retournée si aucune date de naissance n'est proposée
func interrogerUtilisateur() (InfosUser, error) {
// Banner
fmt.Println(`
********************************************************************************
Ce bilan vous est proposé gratuitement, sans publicité ni exploitation des données renseignées.
Il a pour objectif de vous aider à appréhender les enjeux principaux de votre future pension.
Nous vous souhaitons de vivre de beaux moments professionnels jusqu'à votre départ en retraite.
Si vous êtes un conseiller Retraite, n'hésitez pas à soumettre vos idées (améliorations, correctifs...) : https://github.com/ObjectIsAdvantag/retraite/issues/1
Si vous êtes développeur, n'hésitez pas à contribuer au projet https://github.com/ObjectIsAdvantag/retraite
Copyright 2016, Stève Sfartz - @ObjectIsAdvantag - License MIT
********************************************************************************
`)

// Date de naissance
var naissance string
essai, essaiMax := 1, 3
for {
fmt.Printf("Votre date de naissance (JJ/MM/YYYY): ")
fmt.Scanf("%s\n", &naissance)
_, err := depart.StringToTime(naissance)
if err == nil {
log.Debugf("Date saisie : %v", naissance)
break
}
if essai >= essaiMax {
return InfosUser{}, fmt.Errorf("Impossible de récupérer la date de naissance")
}

essai++
fmt.Printf("Saisie incorrecte, nouvel essai %d/%d", essai, essaiMax)
}

// TODO Relevé de carrière
//return InfosUser{Naissance:"24/12/1971", TrimestresCotisés:87, DateReleve:2014}, nil
return InfosUser{Naissance: "24/12/1971", TrimestresCotisés: 0, DateRelevé: 0}, nil

return InfosUser{Naissance: naissance, TrimestresCotisés: 0, DateRelevé: 0}, nil
}

func init() {
Expand All @@ -62,7 +102,7 @@ func init() {

// Only log the warning severity or above.
// [PENDING]
log.SetLevel(log.DebugLevel)
log.SetLevel(log.WarnLevel)
}

func genererBilanSimple(userData InfosUser, infos depart.InfosDepartEnRetraite) {
Expand All @@ -73,20 +113,28 @@ func genererBilanSimple(userData InfosUser, infos depart.InfosDepartEnRetraite)
}).Parse(BilanDateDeNaissance)

decote := pension.DécotePourTrimestresManquants(infos.TrimestresTauxPlein - pension.DECOTE_MAX_TRIMESTRES, userData.Naissance)
simu := Simulation {
simuDec := Simulation {
// la décôte est limitée à 20 trimestres
Trimestres:infos.TrimestresTauxPlein - pension.DECOTE_MAX_TRIMESTRES,
DeltaTrimestres:pension.DECOTE_MAX_TRIMESTRES,
DecoteParTrimestre:fmt.Sprintf("%.3f", decote.Decote.Diminution),
EvolParTrimestre:fmt.Sprintf("%.3f", decote.Decote.Diminution),
TauxPension:decote.TauxPension,
TrimestresCotisés:infos.TrimestresTauxPlein - pension.DECOTE_MAX_TRIMESTRES,
TrimestresManquants:pension.DECOTE_MAX_TRIMESTRES,
}

deltaTrimestres := 8
simuSur := Simulation {
// la surcote n'est pas limitée
Trimestres:infos.TrimestresTauxPlein + deltaTrimestres,
DeltaTrimestres:deltaTrimestres,
EvolParTrimestre:fmt.Sprintf("%.3f", pension.SurcotePourTrimestreSupplementaire()),
TauxPension:50.0 + float32(deltaTrimestres) * pension.SurcotePourTrimestreSupplementaire(),
}

data := TemplateSimpleData{
User:userData,
Infos:infos,
Simu:simu,
SimuDecote:simuDec,
SimuSurcote:simuSur,
}

if err := t.Execute(os.Stdout, data); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion depart/converter.go
Expand Up @@ -9,7 +9,7 @@ import (
"time"
)

const JJMMAAADateFormat = "2/1/2006"
const JJMMAAADateFormat = "02/01/2006"

var ErrDateVide = errors.New("la date n'est pas renseignée")
var ErrDateFormatInvalide = errors.New("le format de date n'est pas valide")
Expand Down
2 changes: 1 addition & 1 deletion pension/decote.go
Expand Up @@ -49,7 +49,7 @@ func init() {
Default.Diminution = 0.625

Default.Taux[0] = 50
Default.Taux[1] = 49.3125
Default.Taux[1] = 49.375
Default.Taux[2] = 48.750
Default.Taux[3] = 48.125
Default.Taux[4] = 47.500
Expand Down
4 changes: 2 additions & 2 deletions pension/surcote.go
Expand Up @@ -5,7 +5,7 @@
package pension


func SurCotePourTrimestreSupplementaire() float32 {
func SurcotePourTrimestreSupplementaire() float32 {
// Taux unique depuis 2008
return 1.25
return 0.625
}
53 changes: 18 additions & 35 deletions template-naissance.go
Expand Up @@ -13,49 +13,38 @@ import (
type TemplateSimpleData struct {
User InfosUser
Infos depart.InfosDepartEnRetraite
Simu Simulation
SimuDecote Simulation
SimuSurcote Simulation
}

type Simulation struct {
Trimestres int // .Infos.TrimestresTauxPlein - 20
DeltaTrimestres int // ex : 20
DecoteParTrimestre string // le taux de décote par trimestre
TrimestresCotisés int
TrimestresManquants int
EvolParTrimestre string // le taux de décote par trimestre
TauxPension float32
}

var BilanDateDeNaissance = `
********************************************************************************
Ce bilan vous est proposé gratuitement, sans publicité ni exploitation des données renseignées.
Il a pour objectif de vous aider à appréhender les enjeux principaux de votre future pension.
Nous vous souhaitons de vivre de beaux moments professionnels jusqu'à votre départ en retraite.
Si vous êtes un conseiller Retraite, n'hésitez pas à soumettre vos idées (améliorations, correctifs...) : https://github.com/ObjectIsAdvantag/retraite/issues/1
Si vous êtes développeur, n'hésitez pas à contribuer au projet https://github.com/ObjectIsAdvantag/retraite
Copyright 2016, Stève Sfartz - @ObjectIsAdvantag - License MIT
********************************************************************************
Vos données personnelles :
- vous êtes né le {{ .User.Naissance }}
- vous ne disposez pas de relevé de carrière.
Votre bilan retraite simplifié suite à la réforme 2010 :
- vous devez cotiser {{ .Infos.TrimestresTauxPlein }} trimestres pour une retraite à taux plein
- une retraite à taux plein correspondant à une pension de l'ordre de 50% de vos 25 meilleurs années.
- vous devrez cotiser {{ .Infos.TrimestresTauxPlein }} trimestres pour toucher une retraite à taux plein
- une retraite à taux plein correspond à une pension de l'ordre de 50% de vos 25 meilleurs années.
- vous partirez partir en retraite au plus tôt à {{ .Infos.AgeDépartMin.AgeEnAnneesMois }}, soit le {{ .Infos.DateDépartMin | timeToString }}
- vous devrez alors avoir cotisé un minmum de {{ .Simu.Trimestres }} trimestres soient {{ .Simu.DeltaTrimestres }} trimestres manquants par rapport à votre taux plein,
- sans quoi vous devriez repousser votre demande de départ en retraite jusqu'à atteindre ce minimum de {{ .Simu.Trimestres }} trimestres
- date à laquelle vous devrez avoir cotisé un minmum de {{ .SimuDecote.Trimestres }} trimestres
- sans quoi vous devriez repousser votre demande de départ en retraite
- décote : votre pension est diminuée de {{ .Simu.DecoteParTrimestre }}% par trimestre manquant par rapport aux taux plein
- ex: vous demandez à partir en retraite après le {{ .Infos.DateDépartMin | timeToString }} et avez cotisé {{ .Simu.TrimestresCotisés }} trimestres,
- soient {{ .Simu.TrimestresManquants }} trimestres manquants par rapport à un taux plein,
- votre pension serait alors de l'ordre de {{ .Simu.TauxPension }}% de vos 25 meilleures années
- principe de la décote :
- votre pension est diminuée de {{ .SimuDecote.EvolParTrimestre }} points par trimestre manquant par rapport aux taux plein
- ex: vous demandez à partir en retraite après le {{ .Infos.DateDépartMin | timeToString }} et avez cotisé {{ .SimuDecote.Trimestres }} trimestres,
soient {{ .SimuDecote.DeltaTrimestres }} trimestres manquants par rapport au taux plein,
votre pension serait alors de l'ordre de {{ .SimuDecote.TauxPension }}% de vos 25 meilleures années
- principe de la surcote :
- votre pension est augmentée de {{ .SimuSurcote.EvolParTrimestre }} points par trimestre supplémentaire cotisé
- ex: vous demandez à partir en retraite après le {{ .Infos.DateDépartMin | timeToString }} et avez cotisé {{ .SimuSurcote.Trimestres }} trimestres,
soient {{ .SimuSurcote.DeltaTrimestres }} trimestres supplémentaires par rapport au taux plein,
votre pension serait alors de l'ordre de {{ .SimuSurcote.TauxPension }}% de vos 25 meilleures années
- à partir du {{ .Infos.DateTauxPleinAuto | timeToString }}, vous pourrez automatiquement bénéficier d'une retraite à taux plein,
- et ce, quelque soit votre nombre de trimestres cotisés,
Expand All @@ -65,12 +54,6 @@ Votre bilan retraite simplifié suite à la réforme 2010 :
- votre employeur serait en droit de contraindre ce départ,
- et vous auriez alors {{ .Infos.AgeDépartExigible.AgeEnAnneesMois }}
- pour un bilan complet, relancer le calculateur avec les données de votre relevé de carrière
- des relevés de situation vous sont transmis par courrier à partir de vos 40 ans, et tous les 5 ans,
- ces relevés font un point sur vos trimestres cotisés,
- vous pouvez aussi télécharger votre relevé après avoir créé votre espace depuis https://www.lassuranceretraite.fr/
- à partir de 55 ans, il est aussi possible de prendre rendez-vous avec votre caisse.
Pour en savoir plus :
- https://www.lassuranceretraite.fr/ par la sécurité sociale - CNAV
- http://www.info-retraite.fr/ par le GIP des organismes de retraite de base et complémentaires
Expand Down

0 comments on commit 244360d

Please sign in to comment.