Algoritmo de calculo de horas

31/03/2007 - 22:25 por jsilva69 | Informe spam
Amigos del foro:

Estoy armando una planilla, lo mas parametrizable posible, de control de
ausentismo y cálculo de horas. Pero me empantane en un algoritmo que
necesito desarrollar. Estos son los datos:

Variables:
et: Tiempo de entrada segun turno
st: Tiempo de salida segun turno
er: Tiempo de entrada real
sr: Tiempo de salida real
li: Limite inferior del intervalo de tiempo a analizar
ls: Limite superior del intervalo de tiempo a analizar

Restricciones:
et < st; er < sr; li < ls
[et, st, er, sr, li, ls] = [00:00 .. 23:59]

Incognitas:
Necesito averguar, dentro del intervalo a analizar [li, ls] los
siguientes datos:

preh: Cantidad de horas trabajadas antes del turno
enh: Cantidad de horas trabajadas dentro del turno
posth: Cantidad de horas trabajadas despues del turno

Si Minutos(x) >= 40 entonces x = x + 1
Si 40 > Minutos(x) >= 20 entonces x = x + 0.5

donde x = [preh, enh, posth]

Ejemplo:

et = 07:00 st = 15:00
er = 05:30 sr = 18:25
li = 06:00 ls = 11:00

preh = 1 (desde 06:00 hasta 07:00)
enh = 4 (desde 07:00 hasta 11:00)
posth = 0

para

li = 11:00 ls = 13:00

preh = 0
enh = 2 (desde 11:00 hasta 13:00)
posth = 0

y para

li = 13:00 ls = 21:00

preh = 0
enh = 2 (desde 13:00 hasta 15:00)
posth = 3.5 (desde 15:00 hasta 18:25)

Los li y ls que puse como ejemplo no son arbitrarios; de ellos (y el dia
de la semana, entre otras cosas) depende la posterior discriminacion en
horas normales, extras, nocturnas, etc.
Caso especial del turno noche: lo "soluciono" uniendo dos intervalos:

li = 21:00 ls = 23:59
li = 00:00 ls = 06:00

Espero haberlo especificado suficientemente. desde ya, muchas gracias.

Julio.
 

Leer las respuestas

#1 Héctor Miguel
01/04/2007 - 06:18 | Informe spam
hola, Julio !

[creo que] hay algunos puntos 'oscuros' en las 'ecuaciones' que usas para describir 'el problema' [me explico]:

1) si los tiempos 'turno' [et y st] equivalen a una jornada laboral 'normal' de 8 horas [et = 07:00 y st = 15:00]
a) cual es el razonamiento para 'castigarle' media hora al que entro 'realmente' a las 5:30 ???
b) cual es la 'necesidad' de separar las horas 'normales' en tres distintos 'enh' ??? [segun tu ejemplo]...
enh = 4 (desde 07:00 hasta 11:00) {+} 2 (desde 11:00 hasta 13:00) {+} 2 (desde 13:00 hasta 15:00)

2) se esperan turnos variados ? [o solo existe el de 07:00 a 15:00 {+} el 'nocturno' con sus 'horas extras'] -???-
se esperan entradas 'desde el dia anterior' y/o salidas 'hasta el dia sigiente' -???-

3) seria conveniente si expones 'realidades' mas... 'visibles' como...
a) rangos de donde 'tomar' las variables et, er, [etc. etc. etc.]
b) las formulas que estas utilizando actualmente [y si les falla... donde, cuando y por que]

4) [personalmente] me 'perdi' tratando de descifrar la ecuacion de los minutos y el 40 :((

comentas los detalles que se hubieran quedado 'en el tintero' ?
saludos,
hector.

__ la consulta original __
Estoy armando una planilla, lo mas parametrizable posible, de control de ausentismo y calculo de horas.
Pero me empantane en un algoritmo que necesito desarrollar. Estos son los datos:

Variables:
et: Tiempo de entrada segun turno
st: Tiempo de salida segun turno
er: Tiempo de entrada real
sr: Tiempo de salida real
li: Limite inferior del intervalo de tiempo a analizar
ls: Limite superior del intervalo de tiempo a analizar

Restricciones:
et < st; er < sr; li < ls
[et, st, er, sr, li, ls] = [00:00 .. 23:59]

Incognitas:
Necesito averguar, dentro del intervalo a analizar [li, ls] los siguientes datos:

preh: Cantidad de horas trabajadas antes del turno
enh: Cantidad de horas trabajadas dentro del turno
posth: Cantidad de horas trabajadas despues del turno

Si Minutos(x) >= 40 entonces x = x + 1
Si 40 > Minutos(x) >= 20 entonces x = x + 0.5
donde x = [preh, enh, posth]

Ejemplo:
et = 07:00 st = 15:00
er = 05:30 sr = 18:25
li = 06:00 ls = 11:00

preh = 1 (desde 06:00 hasta 07:00)
enh = 4 (desde 07:00 hasta 11:00)
posth = 0

para
li = 11:00 ls = 13:00

preh = 0
enh = 2 (desde 11:00 hasta 13:00)
posth = 0

y para
li = 13:00 ls = 21:00

preh = 0
enh = 2 (desde 13:00 hasta 15:00)
posth = 3.5 (desde 15:00 hasta 18:25)

Los li y ls que puse como ejemplo no son arbitrarios; de ellos (y el dia de la semana, entre otras cosas)
depende la posterior discriminacion en horas normales, extras, nocturnas, etc.
Caso especial del turno noche: lo "soluciono" uniendo dos intervalos:
li = 21:00 ls = 23:59
li = 00:00 ls = 06:00

Espero haberlo especificado suficientemente. desde ya, muchas gracias.

Preguntas similares