UM CONTADOR DE DIAS 1- A origem da demanda: a necessidade de se construir um contador de tempo surgiu na necessidade de se contar a duração de cada contrato de trabalho para levantamento do tempo de serviço de um cliente. O objetivo final do cliente é obter a aposentadoria por tempo de serviço, junto ao INSS. 2- A solução tradicional do problema: antes de propormos uma solução que envolva o computador, iremos encarar o problema sem o auxílio da máquina. Ora, para contar o tempo, manualmente, iremos implantar os seguintes passos: 2.1- adotemos o valor 0 para o nosso contador de dias; 2.2- obtenhamos a data de início e de término do primeiro contrato; 2.3- partindo-se da data de início do contrato, vamos acrescentar 1 unidade a ela e adotar a nova data como início do contrato; 2.4- o passo seguinte será comparar a nova data obtida com a data de final de contrato; 2.4.1- se a nova data for igual à data do final do contrato, o valor contido em nosso contador de dias, até aqui, será a resposta final para nossa demanda; 2.4.2- se a nova data for anterior à data do final do contrato, deveremos acrescentar 1 unidade ao contador de dias e retornar ao passo: 2.3; 2.5- Nota 1: a sequência de 2.3 a 2.4.2 caracterizará o nosso laço, quando da montagem de um programa para resolver o problema proposto; 2.6- Nota 2: notem que o conteúdo da solução do problema é extremamente simples. Entretanto, para um caso como: data de início do contrato: 02.02.2007, data de término do contrato: 04.11.2014, o ciclo proposto acima deverá ser repetido por: 2834 vezes. Ora, se supusermos que iremos consumir 12 segundos para cada aplicação do ciclo, manualmente, chegaremos a: 12 x 2834 = 34008 segundos. Isto equivale a 9,75 horas. Se cobrarmos: R$ 15,00 por hora de trabalho, tratando-se de uma atividade de baixa qualificação, teremos um custo de: R$ 146,25 para a execução apenas desta parte do trabalho e somente para este contrato. Ora, convenhamos, nenhum cliente irá se dispor a nos pagar esta quantia pelo trabalho citado. 3. A viabilidade da solução informatizada: ora, admitamos que o custo da hora de nosso trabalho para gerar um script em Java que responda à nossa demanda seja de: R$ 40,00. É perfeitamente viável montar o script em 15 horas de trabalho. Logo, o custo total será de: R$ 600,00. Evidentemente, o script ficará disponível para uso em outras demandas semelhantes. Um valor que julgamos aceitável para atender à demanda de nosso cliente específico seria: R$ 30,00. Lembrando que o cliente possui em sua Carteira de Trabalho, 8 contratos de trabalho. Logo, a elaboração do script se pagaria com o atendimento de apenas 20 clientes com demandas semelhantes o que é uma situação bastante aceitável. 4- Os estudos relativos à parte legal da demanda: será necessário, além de contar o tempo de duração de cada contrato de trabalho, consolidar os dados obtidos, o que deve ser feito dentro do próprio software e consultar e informar o cliente sobre a parte legal da demanda. A consulta à legislação demandará 4 horas de trabalho e será feita uma única vez. Considerando-se o custo de: R$ 30,00 por hora, teremos: R$ 120,00 para esta etapa. O custo total da implantação da solução para a demanda passará para: R$ 720,00. Ora, mantendo-se o valor cobrado por cliente, em: R$ 30,00, serão necessários 24 clientes para cobrir os custos integrais do projeto. 5- O software: criar o script não será nada mais nada menos que traduzir para uma linguagem compreensível pela máquina, a solução manual encontrada. 6- O script passo a passo: inicialmente iremos criar variáveis para abrigar: as datas: inicial e final e o contador de dias; 6.1- a nossa solução irá adotar as variáveis dia, mês e ano, para data inicial e final. Ao emitir mensagens contendo datas, iremos montar a data no momento, utilizando os valores disponíveis de dia, mês e ano; 6.2- agora, o cliente deverá fornecer a data inicial e a final, usando 3 caixas disponibilizadas,. para cada uma delas; 6.3- em seguida, o cliente irá clicar sobre o botão: "CONTADOR": 6.3.1- estarão disponíveis 2 sistemas de proteção contra falta de inserção ou inserção de dados incorretos: 6.3.1.1- se pelo menos uma das caixas (são ao todo 6) para inserção de dia, mês e ano, estiver vazia, no momento em que se clica o contador, será emitida 1 mensagem de erro e a execução do script será interrompida; 6.3.1.2- se for inserido, em qualquer das 6 caixas, 1 ou mais valores que caracterizem data final anterior à data inicial, será emitida 1 mensagem de erro e a execução do script será interrompida; 6.3.1.3- caso se digitem dados que caracterizem a mesma data inicial e final, o script será executado e no final, o número de dias será igual a 0. 6.3.1.4- caso se entre com algo diferente de números em 1 das caixas, o script não será executado. 6.4- Botões auxiliares: são botões que irão auxiliar em situações complementares à execução do script: 6.4.1- : o botão: "AJUDA": irá disponibilizar algumas mensagens de orientações gerais sobre o uso do script; 6.4.2- o botão: "LIMPA' irá esvaziar o conteúdo das caixas: 1 a 6, mantendo-se a opção de seleção (checkbox) presente; 6.4.3- o botão: "ESVAZIA" era esvaziar o conteúdo das caixas que contêm: "DIAS A ACRESCER" e "DATA OBTIDA"; 6.4.4- o botão:"ZERA ACUMULADOR" irá zerar o valor do acumulador de dias contados; 6.4.5- o botão: "CONTA HOMOLOGA" irá contar o número de anos e meses que durou um contrato de trabalho. O critério (previsto em Lei) será contar apenas meses em que se tenha trabalhado mais que 14 dias. 7. Opções de seleção (checkbox): o cliente poderá optar por 1 dos 2 box: "CONTA OU ACRESCENTA TEMPO" ou "CONTA TEMPO PARA RESCISÃO". 8-Opções adicionais oferecidas pelo software: a proposta inicial previa apenas a criação do software para contar dias transcorridos entre duas datas. Foram acrescentadas duas outras opções: "ACRÉSCIMO DE DIAS" que permitirá verificar a data obtida com o acréscimo de um número de dias definido pelo cliente e: "CONTAGEM DE TEMPO PARA RESCISÃO" que permitirá determinar, em última análise, o número de 12 avós para cálculo de verbas rescisórias por períodos parciais. 9. Momentos de definição na criação do software: a montagem do software, olhando-se de uma maneira geral, parece bastante óbvia. Entretanto, em alguns momentos, foi necessária alguma criatividade para encontrar o melhor caminho: 8.1- a transição entre meses e anos: a cada novo incremento do dia, é necessário que se faça um checagem para que não extrapolemos a duração de cada mês do ano. Observado o avanço, além do dia com maior número de cada mês, é necessário que se retorne o dia para 1 e se avance 1 unidade no número do mês: 8.1.1- neste momento, caso o mês seja maior que 12, deve-se retornar o valor do mês para 1 e incrementar o ano de 1 unidade. 8.2- os meses do ano foram divididos em grupos, de acordo com a duração de cada 1: na verdade existem 3 grupos de meses, de acordo com a duração deles. 8.2.1- meses com 30 dias: abril, junho, setembro e novembro; 8.2.2- meses com 31 dias: janeiro, março, maio, julho, agosto, outubro e dezembro; 8.2.3- mês com 28 ou 29 dias: fevereiro: 8.2.3.1- ano não bissexto: o mês de fevereiro possui 28 dias; 8.2.3.2- ano bissexto: o mês de fevereiro possui 29 dias. 8.2.3.3- como o software pode distinguir um ano bissexto de um não bissexto: o ano será bissexto se o número que o representa, no formato: 9999, for divisível por 4 e não for divisível por 100. Isso equivale a dizer que: será bissexto o ano cujo número que o representa seja divisível por 4 e não seja divisível por 25. Portanto, para que o ano não seja bissexto, basta que o número citado não seja divisível por 4 ou, sendo divisível por 4, também seja divisível por 25, ou ainda, não seja divisível por 4, sequer por 25. 8.2.3.4- observe que existe apenas 1 opção para que o ano seja bissexto, existindo outras 3 para que não seja. Esta circunstância nos obrigou a fazer a opção por fazer a transição de mês e ano em uma função isolada que é chamada de dentro da função de contagem. Se optássemos por fazer a transição dentro do módulo de contagem, o caso do mês de fevereiro criaria uma situação muito complicada e passível de nos conduzir facilmente a 1 erro. 9- Obtenha o código completo do script: utilize o link: CONTADOR DE DIAS (www.sofstica.com.br/contadia1.html), clicando com o botão direito do mouse e selecionando: “exibir código fonte da página". Você terá acesso às 369 linhas de código do script em Java.