Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;¿Que datos necesito del trabajador?
- ;;Tipo de cargo (operario, supervisor, ejecutivo)
- ;;Horas extra trabajadas D (numero)
- ;;Horas extra trabajadas N (numero)
- ;;Horas extra trabajadas F (numero)
- ;;Años que lleva en la empresa (numero)
- ;;Autor: Carlos A Delgado
- ;;Fecha: 11 de Julio de 2020
- ;;Contrato: calcular-salario: simbolo, numero, numero, numero, numero -> numero
- ;;Propósito: Es calcular el salario de un trabajador, considerando su tipo, horas extras y descuentos ley
- ;;Ejemplos (calcular-salario 'ejecutivo 60 20 20 16) 7589120
- ;; (calcular-salario 'operativo 40 40 40 40) 3317600
- (define (calcular-salario tipo heD heN heF years)
- (-
- (salario-total tipo heD heN heF years)
- (descuentos (salario-total tipo heD heN heF years))
- )
- )
- (check-expect (calcular-salario 'ejecutivo 60 20 20 16) 7589120)
- (check-expect (calcular-salario 'operativo 40 40 40 40) 3317600)
- ;contrato: salario-total: simbolo, numero,numero,numero,numero -> numero
- (define (salario-total tipo heD heN heF years)
- (+
- (salario-base tipo)
- (horas-extras-D tipo heD)
- (horas-extras-N tipo heN)
- (horas-extras-F tipo heF)
- (bonificacion-tiempo tipo years)
- )
- )
- ;contrato: salario-base: simbolo -> numero
- (define (salario-base tipo)
- (cond
- [(symbol=? tipo 'operativo) 1100000]
- [(symbol=? tipo 'supervisor) 2300000]
- [(symbol=? tipo 'ejecutivo) 4500000]
- [else (error "Tipo de trabajador erroneo")]
- )
- )
- ;contrato: horas-extras-D: simbolo, numero -> numero
- (define (horas-extras-D tipo heD)
- (cond
- [(symbol=? tipo 'operativo) (* heD 8000)]
- [(symbol=? tipo 'supervisor) (* heD 15000)]
- [(symbol=? tipo 'ejecutivo) (* heD 25000)]
- [else (error "Tipo de trabajador erroneo")]
- )
- )
- ;contrato: horas-extras-N: simbolo, numero -> numero
- (define (horas-extras-N tipo heN)
- (cond
- [(symbol=? tipo 'operativo) (* heN 12000)]
- [(symbol=? tipo 'supervisor) (* heN 18000)]
- [(symbol=? tipo 'ejecutivo) (* heN 35000)]
- [else (error "Tipo de trabajador erroneo")]
- )
- )
- ;contrato: horas-extras-F: simbolo, numero -> numero
- (define (horas-extras-F tipo heF)
- (cond
- [(symbol=? tipo 'operativo) (* heF 15000)]
- [(symbol=? tipo 'supervisor) (* heF 22000)]
- [(symbol=? tipo 'ejecutivo) (* heF 50000)]
- [else (error "Tipo de trabajador erroneo")]
- )
- )
- ;contrato: bonificacion-tiempo: simbolo, numero -> numero
- (define (bonificacion-tiempo tipo years)
- (cond
- [(symbol=? tipo 'operativo)
- (cond
- [(and (>= years 0) (< years 5)) 0]
- [(and (>= years 5) (< years 10)) 100000]
- [(and (>= years 10) (< years 15)) 300000]
- [(and (>= years 15) (< years 20)) 800000]
- [(and (>= years 20) (< years 25)) 1000000]
- [ (>= years 25) 1500000]
- [else (error "Número de años incorrecto")])
- ]
- [(symbol=? tipo 'supervisor)
- (cond
- [(and (>= years 0) (< years 5)) 120000]
- [(and (>= years 5) (< years 10)) 340000]
- [(and (>= years 10) (< years 15)) 580600]
- [(and (>= years 15) (< years 20)) 1500000]
- [(and (>= years 20) (< years 25)) 2000000]
- [ (>= years 25) 3000000]
- [else (error "Número de años incorrecto")])
- ]
- [(symbol=? tipo 'ejecutivo)
- (cond
- [(and (>= years 0) (< years 5)) 400000]
- [(and (>= years 5) (< years 10)) 800000]
- [(and (>= years 10) (< years 15)) 1100000]
- [(and (>= years 15) (< years 20)) 2100000]
- [(and (>= years 20) (< years 25)) 3500000]
- [ (>= years 25) 4000000]
- [else (error "Número de años incorrecto")])
- ]
- [else (error "Tipo de trabajador erroneo")]
- )
- )
- ;contrato: descuentos: numero -> numero
- (define (descuentos salTotal)
- (+
- (descuento-seguridad-social (* 0.4 salTotal))
- (descuento-retefuente salTotal)
- )
- )
- ;contrato: descuento-seguridad-social: numero -> numero
- (define (descuento-seguridad-social IBC)
- (+
- (descuento-salud IBC)
- (descuento-pension IBC)
- (descuento-ARP IBC)
- ))
- ;contrato: descuento-salud: numero -> numero
- (define (descuento-salud IBC)
- (* 0.4 0.125 IBC)
- )
- ;contrato: descuento-pension: numero->numero
- (define (descuento-pension IBC)
- (* 0.4 0.16 IBC)
- )
- ;contrato: descuento-pension: numero->numero
- (define (descuento-ARP IBC)
- (* 0.05 IBC)
- )
- ;contrato: descuento-retefuente: numero->numero
- (define (descuento-retefuente salTotal)
- (if
- (>= salTotal 3500000)
- (* (calcular-porcentaje salTotal) salTotal)
- 0)
- )
- ;calcular-porcentaje: numero -> numero
- ;Esta función no se está USANDO
- ; (define (calcular-porcentaje-larga salTotal)
- ; (cond
- ; [(and (>= salTotal 3500000) (< salTotal 4000000)) 0.1]
- ; [(and (>= salTotal 4000000) (< salTotal 4500000)) 0.105]
- ; [(and (>= salTotal 4500000) (< salTotal 5000000)) 0.11]
- ; [(and (>= salTotal 5000000) (< salTotal 5500000)) 0.115]
- ; [(and (>= salTotal 5500000) (< salTotal 6000000)) 0.12]
- ; [(and (>= salTotal 6000000) (< salTotal 6500000)) 0.125]
- ; [(and (>= salTotal 6500000) (< salTotal 7000000)) 0.13]
- ; [(and (>= salTotal 7000000) (< salTotal 7500000)) 0.135]
- ; [(and (>= salTotal 7500000) (< salTotal 8000000)) 0.14]
- ; [(and (>= salTotal 8000000) (< salTotal 8500000)) 0.145]
- ; [(and (>= salTotal 8500000) (< salTotal 9000000)) 0.15]
- ; [(and (>= salTotal 9000000) (< salTotal 9500000)) 0.155]
- ; [(and (>= salTotal 9500000) (< salTotal 10000000)) 0.16]
- ; [(and (>= salTotal 10000000) (< salTotal 10500000)) 0.165]
- ; [(and (>= salTotal 10500000) (< salTotal 11000000)) 0.17]
- ; [(and (>= salTotal 11000000) (< salTotal 11500000)) 0.175]
- ; [(and (>= salTotal 11500000) (< salTotal 12000000)) 0.18]
- ; [(and (>= salTotal 12000000) (< salTotal 12500000)) 0.185]
- ; [(and (>= salTotal 12500000) (< salTotal 13000000)) 0.19]
- ; [(and (>= salTotal 13000000) (< salTotal 13500000)) 0.195]
- ; [(>= salTotal 13500000) 0.2]
- ; ))
- ;
- ;calcular-porcentaje: numero -> numero
- (define (calcular-porcentaje salTotal)
- (+ (* (floor (/ (- salTotal 3500000) 500000)) 0.005) 0.1)
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement