Caelum Stella 1.1 - nova versão no ar!

21 respostas
leobessa

Foque apenas no seu próprio negócio.

Deixe as preocupações como validação e geração de documentos brasileiros para um projeto especializado neste ramo. O Caelum Stella é um projeto open-source com o foco nesta area, e hoje acaba de ser lançada a nova versão deste cinto de utilidades do desenvolvedor brasileiro.

O projeto Caelum Stella fornece várias funcionalidades necessárias para o mercado brasileiro. Utilizando este projeto sua aplicação terá a acesso a recursos como validação de documentos brasileiros (CPF, CNPJ, PIS/PASEP/SUS, Inscrição Estadual) e geração de boletos.

Além disso, visando minizar o esforço para adoção em projetos existentes, são fornecidos adpatadores para frameworks como o Hibernate Validator e Java Server Faces.

Segue abaixo as funcionalidades incluídas na última versão o Caelum Stella:

[list]Validadores de Inscrição Estadual para todos os estados[/list] Utlizando as anotações para o Hibernate Validator
@IE  
 public class PrestadoraDeServicos {  
       
     private String ie;  
   
     private String estado;  
   
     public PrestadoraDeServicos(String ie, String estado) {  
         this.ie = ie;  
         this.estado = estado;  
     }  

     // getters e setters
   
 }
Ou, utilizando as tags JSF do Stella.
<h:panelGrid>  
         <h:messages />  
     
         <h:outputText value="Selecione um estado:" />  
           
         <h:selectOneMenu id="estado"  
           valueChangeListener="#{EmpresaBean.atualizaEstadoNoValidador}"  
           immediate="true">  
           <f:selectItem itemValue="" itemLabel="" />  
           <f:selectItem itemValue="SP" itemLabel="SP" />  
           <f:selectItem itemValue="RJ" itemLabel="RJ" />  
         </h:selectOneMenu>  
     
         <h:outputLabel value="IE sem formatacao:" for="ie" />  
         <h:inputText id="ie" value="#{EmpresaBean.ie}">  
           <stella:validateIE formatted="false"  
               binding="#{EmpresaBean.ieValidator}" />  
         </h:inputText>  
     
      </h:panelGrid>
[list]Geração de boleto bancário para o Banco Bradesco[/list]
Banco banco = new Bradesco();
   Boleto boleto = Boleto.newBoleto().withBanco(banco).withDatas(datas)
            .withDescricoes("descricao 1", "descricao 2", "descricao 3")
            .withEmissor(emissor).withSacado(sacado)
            .withValorBoleto("200.00").withNoDocumento("1234")
            .withInstrucoes("instrucao 1", "instrucao 2", "instrucao 3")
            .withLocaisDePagamento("local 1", "local 2");

   new BoletoGenerator(boleto).toPDF("teste.pdf");
[list]Rotina para geração de números por extenso[/list]
NumericToWordsConverter converter = new NumericToWordsConverter(new FormatoDeReal());  
    double numero = 1000150.99;  
    String extenso = converter.toWords(numero);  
    System.out.println(extenso);
Saída no Console: um milhão e cento e cinquenta reais e noventa e nove centavos

Acesse mais informações no website do projeto:
http://stella.caelum.com.br/

E o roadmap dos futuros recursos:
http://stella.caelum.com.br/roadmap.html

Parabéns a toda equipe do Caelum Stella: Paulo Silveira, Fábio Kung, Caires Santos, Caue Guerra, Lucas Cavalcanti, Jonas Abreu e Guilherme Moreira.

Agradecimentos a comunidade open-source que tem colaborado com o Caelum Stella. Em especial, ao Victor Santos e ao Rafael Carvalho pelas colaborações com o módulo de geração números por extenso.

Colabore você também com o Caelum Stella!

21 Respostas

maquiavelbona

wood:
leobessa:

Saída no Console: um milhão e cento e cinquenta reais e noventa e nove centavos

Isso está correto?


Errado não está pois está sendo agrupado dimensões diferentes da mesma medida. Melhor seria usar a vírgula na ocorrência do primeiro “e”.

Até!

Paulo_Silveira

maquiavelbona:

Errado não está pois está sendo agrupado dimensões diferentes da mesma medida. Melhor seria usar a vírgula na ocorrência do primeiro “e”.

Até!

talvez extract interface nisso, e ai gerar uma outra classe que é o GeradorXXXComVirgulas. ou entao passar um boolean pro construtor se forem só duas implementacoes.

leobessa

Olá wood,

acredito que “um milhão e cento e cinquenta reais e noventa e nove centavos” esteja correto mesmo. Na verdade, não encontrei nenhuma norma ou regra que defina como os números são escritos por extenso.
A geração dos números por extenso está baseada nos usos e costumes.

Segue abaixo um exemplo onde a vírgula é utilizada após o “milhão”.

double numero = 1023850;
        String extenso = converter.toWords(numero);
        //  "um milhão, vinte e três mil e oitocentos e cinquenta reais"

Sua dúvida era em relação a vírgula mesmo?

Luca

Olá

Acho que existem em alguns livros de gramática nos capítulos sobre numerais. Há muitos e muitos anos atrás fiz o mesmo em Clipper. Se não estou enganado, tirei as regras de um livro de gramática. Como não sei mais de qual livro, vou colocar aqui as recomendações do Manual de Redação e Estilo do jornal O Estado de São Paulo:

Para me facilitar, primeiro mostrarei os exemplos:

142.387 = cento e quarenta e dois mil trezentos e oitenta e sete

856.672.549 = oitocentos e cinqüenta e seis milhões, seiscentos e setenta e dois mil quinhentos e quarenta e nove

765.432.854.987 = setecentos e sessenta e cinco bilhões, quatrocentos e trinta e dois milhões, oitocentos e cinqüenta e quatro mil novecentos e oitenta e sete

1400 = mil e quatrocentos

Como se vê, o manual recomenda

  • e entre as centenas, as dezenas e as unidades.
  • Não colocar e nem vírgula entre o milhar e as centenas, a menos que o número termine em 2 zeros
  • em números muito extensos, usar o e na mesma ordem das unidades, mas não entre uma ordem e outra.

Acho que a 2a regra pode ser desprezada na última ordem em nome da facilidade de automação e colocar vírgula também do seguinte modo:
856.672.549 = oitocentos e cinqüenta e seis milhões, seiscentos e setenta e dois mil[color=red],[/color] quinhentos e quarenta e nove

[]s
Luca

tnaires

Luca:
Como se vê, o manual recomenda

  • e entre as centenas, as dezenas e as unidades.

  • Não colocar e nem vírgula entre o milhar e as centenas, a menos que o número termine em 2 zeros

  • em números muito extensos, usar o e na mesma ordem das unidades, mas não entre uma ordem e outra.


Acho que as regras que devemos usar para esse caso são as mesmas que usamos ao enumerar itens quaisquer na língua portuguesa.
Exemplos:

  • Quais os números que saíram na megasena?

  • 02, 14, 26, 35, 39 e 50.

  • Quem foi à festa?

  • Fulano, Beltrano e Cicrano.

  • Como se lê a seguinte medida: R$1.000.150.99?

  • Um milhão, cento e cinquenta reais e noventa e nove centavos.

  • Luiz_Aguiar

    Não sei quanto as regras gramaticais, mas já tive um cheque que voltou por causa de “e” e não vírgula, se é regra num sei, se era dor de barriga do caixa tbm não rs… mas que voltou, voltou.

    saoj

    Parabéns pelo projeto. Muito bom! O gerador de boleto parece de grande utilidade!

    Luca

    Olá

    Lembra onde foi a troca? Nos exemplos que dei há vírgula e “e”. O meu programa baseado em regras tiradas de uma gramática era usado para preencher cheques naquela famosa maquininha e nunca soube de problemas.

    Nas regras que passei faltou ainda o caso de quando a centena começa por zero: 1021 = mil e vinte e um

    As mesmas regras podem ser vistas em:
    Gramática Nova de Faraco & Moura
    Português de Emilia Amaral e outros

    []s
    Luca

    rmala_ti

    Primeiramente parabéns ao pessoal do Projeto Stella pela excelente inciativa.

    leobessa:
    [list]Geração de boleto bancário para o Banco Bradesco[/list]
    Banco banco = new Bradesco();
       Boleto boleto = Boleto.newBoleto().withBanco(banco).withDatas(datas)
                .withDescricoes("descricao 1", "descricao 2", "descricao 3")
                .withEmissor(emissor).withSacado(sacado)
                .withValorBoleto("200.00").withNoDocumento("1234")
                .withInstrucoes("instrucao 1", "instrucao 2", "instrucao 3")
                .withLocaisDePagamento("local 1", "local 2");
    
       new BoletoGenerator(boleto).toPDF("teste.pdf");
    

    Agora, uma dúvida. Eu tentei "brincar" com o gerador de boletos, mas dá erro nesta linha!

    new BoletoGenerator(boleto).toPDF("teste.pdf");
    
    The constructor BoletoGenerator(Boleto) is undefined

    Acredito que esteja falatando algo pro construtor, mas não sei o que é.
    Eu também tentei copilar o exemplo da página do projeto, mas ocorre o mesmo erro.
    Alguem pode dar uma força?

    Existe uma API do projeto, pra ver oque os métodos precisam receber?

    Abraço.

    robertopegoretti

    Amigos,

    Acho que as dicas de regras gramáticais devem ser enviadas diretamente aos desenvolvedores do framework.

    Aqui fica meu parabéns a equipe pelo belo trabalho.

    abs

    leobessa

    Olá rmalati,

    Obrigado pelos elogios.

    O construtor do BoletoGenerator receber um varargs de Boleto, ou seja, um array de Boleto.

    O varargs é um recurso do Java5. Voce está usando Java 5?

    Por algum motivo o varargs não está funcionando no seu ambiente, tente passar um array de Boleto.

    new BoletoGenerator(new Boleto[]{boleto}).toPDF("teste.pdf");
    

    Segue abaixo o JavaDoc do Stella Boleto.
    http://stella.caelum.com.br/javadoc/boleto/index.html

    Abraços

    rmala_ti

    leobessa:
    Olá rmalati,

    Obrigado pelos elogios.

    O construtor do BoletoGenerator receber um varargs de Boleto, ou seja, um array de Boleto.

    O varargs é um recurso do Java5. Voce está usando Java 5?

    Por algum motivo o varargs não está funcionando no seu ambiente, tente passar um array de Boleto.

    new BoletoGenerator(new Boleto[]{boleto}).toPDF("teste.pdf");
    

    Segue abaixo o JavaDoc do Stella Boleto.
    http://stella.caelum.com.br/javadoc/boleto/index.html

    Abraços

    Oh Léo, valeu.
    Eu to usando Java 1.5, mas vou tentar passar o array.
    Obrigado.

    leobessa

    robertopegoretti:
    Amigos,

    Acho que as dicas de regras gramáticais devem ser enviadas diretamente aos desenvolvedores do framework.

    Aqui fica meu parabéns a equipe pelo belo trabalho.

    abs

    Obrigado Roberto.

    Agradeço também as pessoas que enviaram as dicas.
    Já estou tomando nota sobre as regras gramaticais e fazendo mais testes unitários.

    Quem quiser entrar em contato com os desenvolvedores mande um e-mail para [email removido] .

    Luiz_Aguiar

    Foi no Itaú, Luca.
    Mas nunca tinha acontecido antes. :roll:

    Luca

    Olá

    Foi no Itaú, Luca.
    Mas nunca tinha acontecido antes. :roll:

    Hahaha, perguntei se lembrava onde na frase foi a troca de vírgula por letra…

    []s
    Luca

    Eduardo_Bregaida

    Mto bom principalmente a parte com JSF dos validadores, o pessoal tem curtido mto :smiley:

    Luiz_Aguiar

    Luca:
    Olá

    Foi no Itaú, Luca.
    Mas nunca tinha acontecido antes. :roll:

    Hahaha, perguntei se lembrava onde na frase foi a troca de vírgula por letra…

    []s
    Luca
    rsrs… tu tbm só complica né rsrs

    Foi no primeiro “e” da frase, era um cheque de vários milhões rsrs

    rafaelglauber

    Luiz Aguiar:

    Foi no primeiro “e” da frase, era um cheque de vários milhões rsrs

    Milhões de Cruzados.

    :smiley:

    tnaires

    Pois é, opinei sobre as regras gramaticais, mas cometi a gafe de esquecer os parabéns…

    Parabéns à equipe pelo trabalho!

    leandrokjava

    realmente. muito bom.
    parabéns.

    A

    Estão pensando em criar um adaptador para o Flex?

    Criado 1 de setembro de 2008
    Ultima resposta 3 de set. de 2008
    Respostas 21
    Participantes 13