<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.11/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.11/ http://www.mediawiki.org/xml/export-0.11.xsd" version="0.11" xml:lang="pt-BR">
  <siteinfo>
    <sitename>Wiki do Leitão</sitename>
    <dbname>wiki_rodrigogmlengbr</dbname>
    <base>https://wiki.rodrigogml.eng.br/index.php?title=P%C3%A1gina_principal</base>
    <generator>MediaWiki 1.37.0</generator>
    <case>first-letter</case>
    <namespaces>
      <namespace key="-2" case="first-letter">Mídia</namespace>
      <namespace key="-1" case="first-letter">Especial</namespace>
      <namespace key="0" case="first-letter" />
      <namespace key="1" case="first-letter">Discussão</namespace>
      <namespace key="2" case="first-letter">Usuário</namespace>
      <namespace key="3" case="first-letter">Usuário Discussão</namespace>
      <namespace key="4" case="first-letter">Wiki do Leitão</namespace>
      <namespace key="5" case="first-letter">Wiki do Leitão Discussão</namespace>
      <namespace key="6" case="first-letter">Arquivo</namespace>
      <namespace key="7" case="first-letter">Arquivo Discussão</namespace>
      <namespace key="8" case="first-letter">MediaWiki</namespace>
      <namespace key="9" case="first-letter">MediaWiki Discussão</namespace>
      <namespace key="10" case="first-letter">Predefinição</namespace>
      <namespace key="11" case="first-letter">Predefinição Discussão</namespace>
      <namespace key="12" case="first-letter">Ajuda</namespace>
      <namespace key="13" case="first-letter">Ajuda Discussão</namespace>
      <namespace key="14" case="first-letter">Categoria</namespace>
      <namespace key="15" case="first-letter">Categoria Discussão</namespace>
    </namespaces>
  </siteinfo>
  <page>
    <title>Página principal</title>
    <ns>0</ns>
    <id>1</id>
    <revision>
      <id>416</id>
      <parentid>407</parentid>
      <timestamp>2025-11-13T12:53:57Z</timestamp>
      <contributor>
        <username>Rodrigogml</username>
        <id>1</id>
      </contributor>
      <comment>/* RFW - Sefaz */</comment>
      <origin>416</origin>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text bytes="16015" sha1="0ecbuha5ivsew55ua9k5ebd8v1izxiy" xml:space="preserve">= RFW - Rodrigo's Framework =

O objetivo deste projeto é criar um framework '''simplificado''' de produção de aplicações pequenas e médias que utilizem a arquitetura J2EE. Note que simplificado quer dizer seguindo um padrão já fechado e específico. Criando alguns padrões de desenvolvimento e classes utilitárias conseguimos produzir aplicações de forma mais rápida em 90% das situações.



== RFW - Kernel ==

O Kernel é a base para todos os outros módulos e deve conter as principais classes do RFW, sem depender de bibliotecas externas. O objetivo é fornecer o essencial para que todos os módulos do Framework funcionem de forma integrada, sem sobrecarregar a aplicação com dependências.


{| class="wikitable" style="width:100%;"
!scope="col"| Design e Estrutura do FrameWork
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura e design patters do FrameWork.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classe de funcionalidades e Serviços que o FrameWork oferece.&lt;/b&gt;&lt;/p&gt;

|-
| style="vertical-align:top; width:50%"|
* [[Ambiente de Desenvolvimento]]
** Arquivo [[rfwdev.properties]]


* Classe estática [[RFW]]
* [[Exceções &amp; Tratamento]]
* Estrutura de Dados
** [[RFWVO]]
** [[RFWMO]] - Match Object
** [[MetaObject]] - RFWVO_
** [[RFWMetaAnnotations]]
** [[GhostVO]] - GVO
** [[RFWOrderBy]]
** [[RFWField]]


* Processamento e Validação de Dados
** [[PreProcess]]
** [[RFWValidator]]
** [[RFWDataFormatter]]


* Interfaces
** [[RFWDBProvider]]


| style="vertical-align:top; width:50%"|
* [[RFWLogger]]
* [[RFWBundle]]
* [[MeasureRuler]] - Precisa ser revisto, terminado e documentado.
* [[EventDispatcher]]
* [[Location]] - Dados de endereços.
* [[FileVO]] - Persistência de arquivos.

|}


=== RFWUtils ===

Conjunto de classes utilitárias do framework. '''Todas as classes tem seu prefixo em RU para facilitar encontra-las pelo auto complete.'''


{| class="wikitable" style="width:100%;"
!scope="col"| Classe
!scope="col"| Funcionalidades
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;PreProcess&lt;/b&gt;
| style="vertical-align:top"|Esta classe faz parte de validação de estrutura e validação de dados, mas acaba sendo uma classe utilitária já que seus métodos são úteis em toda parte do sistema para validar e processar qualquer valor de variável.
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;RUTypes&lt;/b&gt;
| style="vertical-align:top"|Essa classe agrupa todos os métodos de conversão de tipos.
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;RUFile&lt;/b&gt;
| style="vertical-align:top"|Métodos de manipulação de arquivos. Desde os métodos mais triviais do File do java até operações mais elaboradas.
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;RUGenerator&lt;/b&gt;
| style="vertical-align:top"|Métodos de geração de todo tipo de dados. Strings para teste, UUIDs, números, padrões, etc.
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;RURecursiveClone&lt;/b&gt;
| style="vertical-align:top"|Métodos utilizados na clonagem recursiva de objetos, principalmente o RFWVO, para uma cópia completamente independente de dois objetos.
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;RUReflex&lt;/b&gt;
| style="vertical-align:top"|Métodos para manipulação de objetos a partir de reflexão. Definição de valores em atributos, obtenção de informações de objetos, métodos, importações e vários métodos auxiliares para trabalhar com a estrutura de objetos do RFW.
|-
| style="vertical-align:top;text-align:center;width:200px"|&lt;b&gt;RUString&lt;/b&gt;
| style="vertical-align:top"|Métodos de manipulação de String, truncates, repetições, formatações, limpeza de espaços, tabs, caracteres inválidos, acentos, etc.
|}

== RFW - ORM ==

O RFW ORM é o módulo de ORM (Object-Relational Mapping) do FrameWork. Ele é responsável por gerenciar a persistência dos objetos baseados no [[RFWVO]] de forma integrada com as demais definições do sistema.


As '''vantagens''' do RFW ORM sobre o Hibernate ou o EclipseLink são:
* '''Menor uso de memória''' - sendo um código mais conciso e focado na necessidade, tem bem menos linhas de código que outras ferramentas.
* '''Permite hot-deploy do código''' - como não utiliza inserção de bytecode no deploy permite que o código seja alterado de forma live.
* '''Independente do JPA''' - Por ser independente da plataforma JPA (Java Persistence API) o RFW ORM pode ser utilizado tanto dentro de um projeto J2EE quanto de uma aplicação menor.
* '''Sem dependência de bibliotecas externas''' - Por não utilizar nenhuma biblioteca externa, o módulo não carrega uma infinidade de dependências que pesam no sistema e carregam a JVM. &lt;ref&gt;Não tem nenhuma dependência direta, mas será necessário importar bibliotecas de conexão com o seu banco de dados, etc.&lt;/ref&gt;


Em compensação, as '''desvantagens''' do nosso ORM são:
* '''Suporte ao MySQL e ao Derby''' - embora o framework trabalhe com a ideia de dialetos, atualmente ele só tem suporte ao MySQL e ao Derby. Novos bancos de dados precisam de alguma implementação desses dialetos.
* '''Não altera a estrutura do banco de dados''' - Diferentemente dos "concorrentes" o RFW ORM não foi concebido para criar ou atualizar o banco de dados automaticamente, embora sua estrutura aceitasse o acréscimo dessa funcionalidade, atualmente não há suporte.
* '''Menos maleável''' - Por ser baseado no [[RFWVO]], o RFW ORM exige que todo objeto tenha seu próprio ID único. Ou seja, todo objeto deve ser identificado por um ID. Isso quer não é possível criar uma PK com base em múltiplas colunas. Aqui será obrigatório uma coluna extra para id (e que obrigatoriamente se chamará id), e as outras colunas serão tratadas com uma constraint de uniquekey.
*: É possível criar tabelas sem o id apenas em casos de N:N, desde que essa tabela não tenha um objeto [[RFWVO]] representando-a. Caso o relacionamento N:N tenha mais dados, será obrigatório ter uma coluna ID, mesmo que as duas colunas FK sejam suficientes para identificar o objeto.


{| class="wikitable" style="width:100%;"
!scope="col"| Design e Estrutura do FrameWork
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura e design patters do FrameWork.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classe de funcionalidades e Serviços que o FrameWork oferece.&lt;/b&gt;&lt;/p&gt;

|-
| style="vertical-align:top; width:50%"|
* Persistência de Dados
** [[RFWDAO]]
** [[RFWDAOConverterInterface]]

| style="vertical-align:top; width:50%"|
* Converters Fornecidos
** [[MeasureUnitDAOConverter]]

|}

== RFW - Sefaz ==


O módulo RFW.SEFAZ tem um objetivo de deixar transparente a conexão com os serviços da SEFAZ, como emissão de NFCe e NFe, e outros serviços disponíveis.

'''Dependências:''' Têm dependência apenas com o Axis2 para conexão do WebService.


{| class="wikitable" style="width:100%;"
!scope="col"| Design, Documentação do Módulo e Outras Informações
!scope="col"| Implementação e Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos informativos, tanto do sistema quanto externos, tutoriais e registros.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Documentação sobre a implementação atual do sistema, como classe de funcionalidades, serviços, etc. que o FrameWork oferece.&lt;/b&gt;&lt;/p&gt;

|-
| style="vertical-align:top; width:50%"|
* Informações e Definições
** [[Requisitos RFW.SEFAZ]]
** [[Legislação e Informações Oficiais SEFAZ]]


* Outros Documentos
** [[Criando Stubs do Axis2 para WS da SEFAZ]]
** [[XSD To Java Object (JAXB Plugin)]]
** [[TrustManager para SEFAZ]]
** [[Layout NFe em Wiki]]


* Log
** [[Problemas Conhecidos do RFW.SEFAZ]]

| style="vertical-align:top; width:50%"|

* Classes Principais
** [[SEFAZDefinitions]]
** [[SEFAZ]]


* Classes Utilitárias
** [[SEFAZUtils]]
** [[SEFAZXMLValidator]]


* RFWVOs
** [[RFWVO para RFW.SEFAZ]]

|}

=== Utilização ===

Para utilizar o módulo basta instanciar a classe SEFAZ, passando as configurações já no construtor. Para os serviços da NFe será necessário o certificado do cliente e o certificados públicos da SEFAZ (para validar a segurança da conexão).

Com a instância do SEFAZ criada, basta chamar os métodos equivalentes do webservice.

== RFW - SPED ==

O **RFW.SPED** é uma biblioteca completa para o gerencimento dos arquivos do SPED. Facilita a montagem da estrutura do arquivo e sua manipulação de validação e cálculo dos campos automáticos.

{| class="wikitable" style="width:100%;"
!scope="col"| Clases Principais
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura de classes e funcionamento básico do módulo.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Documentação e Requisitos&lt;/b&gt;&lt;/p&gt;
|-
| style="vertical-align:top; width:50%"|

* [[Estrutura de Classes]] - Explica as classes e como montar os arquivos do SPED.

| style="vertical-align:top; width:50%"|

* Documentação sobre o SPED contemplado pela biblioteca e obserções:
** [[SPED Fiscal]]
** [[SPED Contribuições]]


|}

== RFW - Terminal ==

O '''RFW.Terminal''' é uma biblioteca completa para controle de terminais, oferecendo ferramentas para manipulação total do ambiente de linha de comando. O projeto abrange formatação de texto, controle do cursor, manipulação de cores e estilos, além de funcionalidades avançadas para input, output e navegação. Seu objetivo é simplificar o desenvolvimento de interfaces de terminal, fornecendo uma API flexível para exibição de informações e interação com o usuário, tudo de forma eficiente e extensível.

{| class="wikitable" style="width:100%;"
!scope="col"| Clases Principais
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura e funcionamento básico do módulo.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classe com funcionalidades extras.&lt;/b&gt;&lt;/p&gt;
|-
| style="vertical-align:top; width:50%"|

* Classes Principais
** [[Terminal]]
** [[CommandParser]]
| style="vertical-align:top; width:50%"|

* [[Figlet]] e [[Figlet Fonts]]
|}


== RFW - Finance==

O '''RFW.Finance''' é uma biblioteca para auxiliar com sistemas financeiros. Seuobjetivo é fornecer métodos e funcionalidades para faciliar funções como:
* Gerenciar arquivos como 'CNAB', 'SisPAG' (Itaú) e outros modelos de troca de arquivo financeiros;
* Parser de arquivos OFX;
* Integração com sistemas de TEF (NTK/PayGO, SisTEF, etc.);
* Leitura, criação e validação de boletos e outras Guias;
* Criação e manipulação de código / QRCode de PIX;


{| class="wikitable" style="width:100%;"
!scope="col"| Funcionalidades
!scope="col"| Clases Principais
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Documentação e outros tópicos relacionados.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classe e funcionalidades do sistema.&lt;/b&gt;&lt;/p&gt;
|-
| style="vertical-align:top; width:50%"|

* Manuais
** [https://cmsarquivos.febraban.org.br/Arquivos/documentos/PDF/Layout%20padrao%20CNAB240%20V%2010%2009%20-%2014_10_21.pdf Manual CNAB v10.09]

| style="vertical-align:top; width:50%"|
* CNAB
:* Escrita
::* [[CNAB240]] - Criação de arquivo CNAB240
:* Leitura
::* [[CNAB240Parser]] - Parser para o arquivo CNAB240

* FinancialServices
:* [[BCBFinancialService]]

|}

== RFW - Vaadin ==

O RFW Vaadin é o módulo utilizado para facilitar a criação de uma interface WEB para as aplicações criadas sobre o FrameWork.

Este módulo é criado em cima do Vaadin, e trás todas as suas ferramentas deixando o desenvolvedor criar o que desejar. No entanto, trás diversas classes e ferramentas que se integram com o nosso framework para agilizar e facilitar o desenvolvimento de aplicações.


{| class="wikitable" style="width:100%;"
!scope="col"| Design e Estrutura do FrameWork
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura e design patters do FrameWork.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classe de funcionalidades e Serviços que o FrameWork oferece.&lt;/b&gt;&lt;/p&gt;
|-
| style="vertical-align:top; width:50%"|

* Estrutura da UI
** [[RFWUI]]
** RFWFrame (ainda não extraído da aplicação)
** [[RFWWindow]]
**: ''[[RFWBrowserResizeListener]]''
**: ''[[RFWShortcutListener]]''



* Providers de Dados
** [[IconProvider]]
** [[UIDataProvider]]
** [[UIGridDataProvider]]
** [[UITreeDataProvider]]


| style="vertical-align:top; width:50%"|

* ????
** [[UIFactory]]
** [[FWVad]]
** [[TreatException]]


* Componentes da Tela
** [[RFWAssociativeComponent]]
** [[RFWButtonToggle]]
** [[RFWComboBoxCity]]
** [[RFWComboBoxMeasureUnit]]
** [[RFWDateRangeComponent]]
** [[RFWTagsSelector]]


* Grid
** [[UIGridRowHighlight]]


* Windows
** [[RFWPickerWindow]]
**: ''[[RFWCEPPickerWindow]]''

|}


== RFW - Notifier ==

O RFW Notifier é o módulo responsável pela criação e integração de sistemas de notificações para aplicações desenvolvidas sobre o FrameWork.

Este módulo visa oferecer uma interface simples e unificada para envio de mensagens, documentos, alertas e informações para usuários e desenvolvedores através de diferentes meios de comunicação, como Telegram, Slack, E-mail, SMS, WhatsApp, entre outros.

Inicialmente, o projeto disponibiliza integração com o Telegram, mas será expandido com novos canais de comunicação no futuro.

{| class="wikitable" style="width:100%;"
!scope="col"| Design e Estrutura do FrameWork
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura e organização do módulo RFW Notifier.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classes de funcionalidades e Serviços de Notificações disponíveis.&lt;/b&gt;&lt;/p&gt;
|-
| style="vertical-align:top; width:50%"|

| style="vertical-align:top; width:50%"|

* Notificações Implementadas
** [[TelegramNotifier]]


* Integrações Futuras
** SlackNotifier (futuro)
** EmailNotifier (futuro)
** SMSNotifier (futuro)
** WhatsAppNotifier (futuro)

|}

= Módulos de Distribuição =

== RFW.Distro ==

Este módulo tem apenas a função de concentrar a compilação de todos os módulos do RFW. Seu arquivo '''pom.xml''' relaciona todos os módulos para a correta compilação e testes de todos os módulos do RFW. Não deve conter nenhum código ou pastas com arquivos adicionais.

= Módulos em Extinção =

== RFW - Módulo Base ==

Este módulo RFW.Base está sendo extinto, e suas funcionalidades sendo migradas para outros módulos do RFW. Foi criado no início do desenvolvimento do RFW, mas depois de algumas mudanças de estrutura ele precisa ser completamente reorganizado, e para isso está sendo lentamento migrado para os demais módulos.


{| class="wikitable" style="width:100%;"
!scope="col"| Design e Estrutura do FrameWork
!scope="col"| Funcionalidades
|-
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Tópicos relacionados à estrutura e design patters do FrameWork.&lt;/b&gt;&lt;/p&gt;
| &lt;p align="justify" style="margin:10px;"&gt;&lt;b&gt;Classe de funcionalidades e Serviços que o FrameWork oferece.&lt;/b&gt;&lt;/p&gt;

|-
| style="vertical-align:top; width:50%"|
* Processamento e Validação de Dados
** [[RFWValidator]] &lt;strong&gt;Ainda está dentro do BIS10, por fazer acessos no banco de dados, precisa da criação de interface!&lt;/strong&gt;

| style="vertical-align:top; width:50%"|

|}

= Pendências do Projeto =

* '''RFW.SEFAZ'''
** '''SEFAZEnums''' - Terminar de criar as enumerations que são utilizadas no XML, incluindo os códigos para conversão entre Enum e XML. Colocando os métodos necessários nos objetos XSDs para facilitar as conversões das informações pelas aplicações que opterem pela utilização das Enumerations. Também finalizar os bundles dessas Enums.

= Notas =
&lt;references /&gt;</text>
      <sha1>0ecbuha5ivsew55ua9k5ebd8v1izxiy</sha1>
    </revision>
  </page>
</mediawiki>
