[firebase-br] OFF-Topic - Modelagem e Cálculo de Horas

Gladiston Santana gladiston em vidy.com.br
Qui Jul 2 09:31:18 -03 2015


O que você se refere são logs, tabelas que registram eventos.
Registre todas as passadas de cartão, sem discriminação numa tabela de log.
Um log é uma tabela simples que não calcula nada e apenas registra o que é
essencialmente eventos, provavelmente pk, codfunc e timestamp, a principio
todos os dados juntos vão ser uma bagunça triste de se ver, mas lhe
permitirá rastreabilidade e auditagem que é uma preocupação em sistemas de
TI consistentes.
A primeira parte do programa é isso, um simples log e deve funcionar sem
erros, quando você criar sua firma de automação vai ser essa parte do
programa que embarcará num dispositivo.

A segunda parte do programa é o que o operador verá, então crie crie uma
tabela que será a vista do ponto de vista humano e que tenha algum sentido
como codfunc, entrada, saida e demais campos, como provavelmente era a tua
planilha.
O pulo do gato na segunda parte do programa, é criar uma procedure que lê
as passadas na tabela de log e dê um sentido a elas jogando-as na tabela
que será vista pelo operador.
Para interpretar os logs, os dados deverão estar sequenciados por codfunc e
timestamp, então a procedure lê registro-a-registro, interpreta a sequencia
que tá vendo e vai populando a segunda tabela.
Haverá abominações e casos de exceção, por exemplo, se o camarada passou o
cartão 10 minuto depois da primeira passada, a segunda deverá ser ignorada
ou tratada como saída? Se a festa perdurou de um dia para o outro, como
saber que um cartão que passou as 8h é a saída do dia anterior ou uma nova
entrada? são perguntas que a lógica da procedure terá de tratar.
E se depois de algum tempo perceber que uma regra foi esquecida? então
modifica a procedure com a nova lógica, apaga os dados anteriores e re-lê
os logs com a nova procedure. Entende porque os logs são importantes? São
eles, e não a segunda parte do programa que carrega a responsabilidade de
ser inequívoco.
O restante, o pessoal já cantou a bola.

Isso representa um belo desafio para iniciantes e quem realmente quer
aprender banco de dados e sua linguagem. Sei o quanto é dificil sair da
zona de conforto da planilha, e está de parabéns em tomar essa iniciativa.

[]´s e boa sorte.

Em 30 de junho de 2015 16:27, Ricardo Borges Zancanaro <
rbzancanaro em gmail.com> escreveu:

> Meu nome é Ricardo, durante a graduação acompanhava a lista diariamente,
> porém tomei outros rumos e me afastei da área de TI, hoje trabalho
>
> em uma Prefeitura no interior de Santa Catarina e durante o aniversário da
> cidade me surgiu uma necessidade que acabei resolvendo com
>
> planilhas do excel já que não tinha tempo hábil para desenvolver uma
> solução, mas quero me preparar para a próxima. Como não me descadastrei
>
> da lista resolvi pedir ajuda.
>
> No aniversário do municipal é realizada uma Expofeira com 5 dias de
> duração, começando na quarta-feira até domingo.
> Desses 5 dias 3 podem ter expediente normal para os funcionários, pode
> ocorrer um feriado entre quarta e sexta.
> No feriado, sábado e domingo todas as horas trabalhadas são pagas.
> Nos dias de expediente normal deve-se analizar o horário de cada
> funcionário, se trabalhou fora do expediente pagam-se as horas.
> São vários os horários de expediente, conforme exemplo:
>
> pk | entrada | saida | entrada2 | saida2
> ----------------------------------------
> 01 | 05:00   | 11:00 |          |
> 02 | 08:00   | 12:00 |  14:00   | 17:00
> 03 | 07:30   | 12:00 |  13:30   | 17:30
>
> pk | nomefunc | fkhorario
> -------------------------
> 11 | FuncA    | 01
> 22 | FuncB    | 02
> 33 | FuncC    | 03
> 44 | FuncD    | 02
>
> Durante o evento os funcionários podem trabalhar sem pausa ou realizar mais
> de uma pausa durante o período.
>
> pk | entrada | saida | entrada2 | saida2 | entrada3 | saida3 | fkfunc
> ---------------------------------------------------------------------
> 01 | 10:00   | 14:00 |          |        |          |        | 11
> 02 | 07:00   | 12:30 | 13:00    | 20:00  | 20:30    | 24:00  | 22
> 03 | 07:00   | 23:00 |          |        |          |        | 33
> 04 | 08:00   | 12:00 | 14:00    | 17:00  |          |        | 44
>
> Que resulta o pagamento:
>
> pk | horaspagas | fkfunc
> ------------------------
> 01 | 3          | 11
> 02 | 9          | 22
> 03 | 7,5        | 33
> 04 | 0          | 44
>
> Considerando somente os dias em que há expediente, a modelagem inicial
> ficou assim:
> Horarios(pk, entrada, saida, entrada2, saida2)
> Pessoa(pk, nomefunc, fkhorario)
> Batidas(pk, entrada, saida, totalhoraspagas, fkfunc)
>
> Como não sabemos quantos intervalos cada um fará pensei que o melhor seria
> deixar uma entrada e saida nas batidas, podendo ter mais de uma
>
> para cada funcionário no dia, bem como no momento do registro verificar o
> quanto dessas horas serão pagas.
>
> Minhas dúvidas são:
> 1) A modelagem é a ideal? O que pode ser diferente?
> 2) Qual a melhor abordagem para o cálculo de horas? Aqui sinceramente eu
> empaquei.



Mais detalhes sobre a lista de discussão lista