Caelum Stella 1.1 - nova versão no ar!

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

[code] @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

} [/code]
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]

[code]
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”);[/code]

[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!

[quote=wood][quote=leobessa]
Saída no Console: um milhão e cento e cinquenta reais e noventa e nove centavos
[/quote]

Isso está correto?[/quote]
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é!

[quote=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é![/quote]

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.

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?

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

[quote=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.[/quote]
    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.

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.

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

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

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

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

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.

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

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

[quote=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

[/quote]

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

[quote=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[/quote]

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 caelum-stella-devel@lists.sourceforge.net .

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

Olá

Foi no Itaú, Luca.
Mas nunca tinha acontecido antes. :roll: [/quote]

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

[]s
Luca

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

[quote=Luca]Olá

Foi no Itaú, Luca.
Mas nunca tinha acontecido antes. :roll: [/quote]

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

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

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

[quote=Luiz Aguiar]
Foi no primeiro “e” da frase, era um cheque de vários milhões rsrs[/quote]

Milhões de Cruzados.

:smiley:

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

Parabéns à equipe pelo trabalho!