CONTEÚDO


Introdução

Neste documento procuramos apresentar e justificar as escolhas técnicas realizadas durante a implementação da rotina SCANCREF. As escolhas podem ser agrupadas da seguinte maneira:

Paradigma

A decisão de utilizar a Orientação a Objetos em detrimento da programação estruturada é provavelmente a mudança mais significativa empregada no desenvolvimento desta rotina. 

Não chega a ser uma novidade na Squad a existência de rotinas utilizando este modelo, porém o que torna a nossa abordagem um tanto mais inovadora é o uso de padrões de arquitetura e recursos avançados da linguagem que potencializam o poder de abstração da orientação a objetos.

O porquê da escolha

A escolha do paradigma foi orientada pelas vantagens que o mesmo traz para o desenvolvimento:


Todas estas vantagens foram exploradas com maior ou menor intensidade durante o desenvolvimento. Ao final deste documento deixamos a documentação no padrão Protheus Doc com a descrição das classes e métodos criados.

Arquitetura

Desenvolvemos a rotina SCANCREF utilizando dois modelos arquiteturais:

1. Arquitetura em camadas (Layered Architecture)

O primeiro deles é um modelo em camadas. É importante lembrar que nesta parte da aplicação não há necessidade de persistência de dados, logo não foi necessário se preocupar com uma interface gráfica para entrada de informações por parte do usuário. As camadas criadas são resumidas abaixo:

O porquê da escolha

Escolhemos essa abordagem visando os seguintes motivos:

2. Model-View-Controller ou MVC

Aqui foram desenvolvidas as tabelas e as respectivas telas para entrada de informações, utilizando as funções MVC disponibilizadas pelo Framework.

O porquê da escolha

Escolhemos essa abordagem devido ao domínio do time sobre a tecnologia.

Linguagem

Embora não seja mandatória em relação às escolhas de paradigma e arquitetura – inclusive, cronologicamente, a escolha da linguagem foi anterior a estas últimas –, optamos pelo uso do TLPP.

O porquê da escolha

As justificativas são:


Anexo I – Artefatos MVC


FISA309 - Cadastro dos Quadros - Scanc Refinaria do Anexo VI

FISA309 Function


Rotina para cadastro e geração do arquivo SCANC REF.

Definição:

Sintaxe

FISA309()




MenuDef Static Function


Função responsável por gerar o menu

Definição:

Sintaxe

MenuDef()




ModelDef Static Function


Função que criará o modelo do tree para cadastro de quadros do SCANC REF

Definição:

Sintaxe

ModelDef()




ViewDef Static Function


Função que monta a view da rotina

Definição:

Sintaxe

ViewDef()




MontaTree Static Function


Função que cria tree com as rotinas disponíveis do SCANC

Definição:

Sintaxe

MontaTree()




FChgTree Static Function


Adiciona ações para cada nó do Tree

Definição:

Sintaxe

FChgTree()




FBrowseMon Static Function


Browser para cada nó que selecionar

Definição:

Sintaxe

FBrowseMon()




FSA309FUNC Function


Função que identifica a opção selecionada pelo usuário e abre a rotina pertinente a opção selecionada.

Definição:

Sintaxe

FSA309FUNC()




FISA309AR Static Function


Chamada de geração do arquivo SCANC REF Anexo VI

Definição:

Sintaxe

FISA309AR()




FISA309Vld Static Function


Verifica se o diretório de destino para exportação do TXT existe.

Definição:

Sintaxe

FISA309Vld()




FISA309PROC Static Function


Função para implementar a classe do arquivo e gerar o arquivo magnético

Definição:

Sintaxe

FISA309PROC(cMesAno,cUfDest,cDestArq,cNomeArq,aFil)

Parâmetros

NomeTipoUsoDescrição
cMesAnocharacterObrigatórioparam_description
cUfDestcharacterObrigatórioparam_description
cDestArqcharacterObrigatórioparam_description
cNomeArqcharacterObrigatórioparam_description
aFilarrayObrigatórioparam_description

Retorno

TipoDescrição
variantreturn_description


FISA310 - Rotina para cadastro e geração do arquivo SCANC REF

FISA310 Function


Rotina para cadastro de valores dos quadros do Anexo 6 do SCANC REF

Definição:

Sintaxe

FISA310()




MenuDef Static Function


Funcao responsável por gerar o menu.

Definição:

Sintaxe

MenuDef()




ModelDef Static Function


Função que criará o modelo do cadastro de quadros do SCANC REF

Definição:

Sintaxe

ModelDef()




ViewDef Static Function


Função que monta a view da rotina

Definição:

Sintaxe

ViewDef()




A310Active Static Function


Função que trata informações especificas por quadros do SCANC

Definição:

Sintaxe

A310Active()




WhenCliFor Static Function


Controle edição do campo, somente quando o campo CJO_TPCHV for Fornecedor/Cliente

Definição:

Sintaxe

WhenCliFor()




WhenCodFil Static Function


Controle edição do campo, somente quando o campo CJO_TPCHV for Filial

Definição:

Sintaxe

WhenCodFil()




A310ChgF3 Static Function


Função responsável por informar a consulta padrão

Definição:

Sintaxe

A310ChgF3()




A310Remove Static Function


Remove campo de acordo com o quadro posicionado

Definição:

Sintaxe

A310Remove()




FISA310F3 Function


Função para consulta padrão F3 do campo CJO_CODEMP.

Definição:

Sintaxe

FISA310F3()




FS310EmpF3 Function


Função que trabalha em conjunto com a função FISA310F3 para consulta padrão.

Definição:

Sintaxe

FS310EmpF3()




ValidCpo Static Function


Validação de campos

Definição:

Sintaxe

ValidCpo()




FISA310POS Static Function


Validação de campos caso estejam vazios (Tudo OK).

AutorDelleon FernandesDesde16/02/2023Versão12.1.2210

Definição:

Sintaxe

FISA310POS()

Anexo II – Classes e métodos TLPP


Namespace backoffice.fiscal.arquivos.estadual.scancref.model


FieldOfScanRef class


Classe genérica com métodos e propriedades comuns à todos os registros do SCANC Refinaria

Definição:

Sintaxe

FieldOfScanRef()




toString of Class FieldOfScanRef method


Retorna o registro no formato Character

Definição:

Sintaxe

FieldOfScanRef():toString()

Retorno

TipoDescrição
CharacterRetorna o registro no formato Character




RegA6HD class


Classe modelo para o registro de cabeçalho do arquivo SCANC Refinaria

Definição:

Sintaxe

RegA6HD()




RegA6Q3 class


Classe modelo para o registro QUADRO 3 - OPERAÇÕES REALIZADAS PELO EMITENTE DO RELATÓRIO

Definição:

Sintaxe

RegA6Q3()




RegA6Q1 class


QUADRO 1 - Anexo VI Quadro 1 - VALOR DEVIDO POR OPERAÇÕES COM IMPOSTO RETIDO

Definição:

Sintaxe

RegA6Q1()




RegA6Q2 class


QUADRO 2 - APURAÇÃO DO ICMS PROVISIONADO

Definição:

Sintaxe

RegA6Q2()




RegA6Q41 class


QUADRO 4.1 - REPASSE POR OPERAÇÕES REALIZADAS POR DISTRIBUIDORAS/TRR (Transportador Revendedor Retalhista de Combustível)

Definição:

Sintaxe

RegA6Q41()




RegA6Q42 class


QUADRO 4.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q42()




RegA6Q43 class


QUADRO 4.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q43()




RegA6Q5 class


QUADRO 5 - REPASSE POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

RegA6Q5()




RegA6Q6 class


QUADRO 6 - REPASSE POR REMESSA DE AEAC (Álcool etílico anidro combustível) OU DE B100 (Biodisel) PARA OUTRAS UF

Definição:

Sintaxe

RegA6Q6()




RegA6Q61 class


QUADRO 6.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

RegA6Q61()




RegA6Q62 class


QUADRO 6.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q62()




RegA6Q63 class


QUADRO 6.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q63()




RegA6Q71 class


QUADRO 7.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

RegA6Q71()




RegA6Q72 class


QUADRO 7.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q72()




RegA6Q73 class


QUADRO 7.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q73()




RegA6Q8 class


QUADRO 8 - DEDUÇÃO POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

RegA6Q8()




RegA6Q91 class


QUADRO 9.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

RegA6Q91()




RegA6Q92 class


QUADRO 9.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q92()




RegA6Q93 class


QUADRO 9.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

RegA6Q93()




RegA6Q10 class


QUADRO 10 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A DISTRIBUIDORAS

Definição:

Sintaxe

RegA6Q10()




RegA6Q11 class


QUADRO 11 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A TRR

Definição:

Sintaxe

RegA6Q11()




RegA6Q12 class


QUADRO 12 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A IMPORTADORES

Definição:

Sintaxe

RegA6Q12()




RegA6Q13 class


QUADRO 13 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A OUTROS CONTRIBUINTES

Definição:

Sintaxe

RegA6Q13()




RegA6Q14 class


QUADRO 14 - DEDUÇÃO TRANSFERIDA DE OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

RegA6Q14()




RegA6Q15 class


QUADRO 15 - DEDUÇÃO TRANSFERIDA PARA OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

RegA6Q15()

Namespace backoffice.fiscal.arquivos.estadual.scancref.service


ScancRefService class


Classe responsável por obter os dados dos registros do SCANC Refinaria

Definição:

Sintaxe

ScancRefService()




QryCJO of Class ScancRefService method


Método responsável por buscar os registros da tabela CJO com os dados dos quadros preenchidos pelo usuário

Definição:

Sintaxe

ScancRefService():QryCJO()

Retorno

TipoDescrição
Charactercom o alias da query para uso




DefCliFor of Class ScancRefService method


Método responsável por traduzir o tipo, sendo o cliente, fornecedor ou filial

Definição:

Sintaxe

ScancRefService():DefCliFor()

Retorno

TipoDescrição
Arraycom os dados da base




getRegA6HD of Class ScancRefService method


Método responsável por fornecer o registro de cabeçalho do SCANC Refinaria

Definição:

Sintaxe

ScancRefService():getRegA6HD()

Retorno

TipoDescrição
Objectretorna um objeto do tipo RegA6HD




getRegA6Q1 of Class ScancRefService method


QUADRO 1 - Anexo VI Quadro 1 - VALOR DEVIDO POR OPERAÇÕES COM IMPOSTO RETIDO

Definição:

Sintaxe

ScancRefService():getRegA6Q1()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q1




getRegA6Q2 of Class ScancRefService method


QUADRO 2 - APURAÇÃO DO ICMS PROVISIONADO

Definição:

Sintaxe

ScancRefService():getRegA6Q2()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q2




getRegA6Q3 of Class ScancRefService method


Método responsável por fornecer o QUADRO 3 - OPERAÇÕES REALIZADAS PELO EMITENTE DO RELATÓRIO

Definição:

Sintaxe

ScancRefService():getRegA6Q3()

Retorno

TipoDescrição
Arrayretorna um array de objetos do tipo RegA6Q3




getRegA6Q41 of Class ScancRefService method


QUADRO 4.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q41()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q41




getRegA6Q42 of Class ScancRefService method


QUADRO 4.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q42()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q42




getRegA6Q43 of Class ScancRefService method


QUADRO 4.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q43()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q43




getRegA6Q5 of Class ScancRefService method


QUADRO 5 - REPASSE POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q5()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q5




getRegA6Q6 of Class ScancRefService method


QUADRO 6 - REPASSE POR REMESSA DE AEAC (Álcool etílico anidro combustível) OU DE B100 (Biodisel) PARA OUTRAS UF

Definição:

Sintaxe

ScancRefService():getRegA6Q6()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q6




getRegA6Q61 of Class ScancRefService method


QUADRO 6.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q61()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q61




getRegA6Q62 of Class ScancRefService method


QUADRO 6.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q62()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q62




getRegA6Q63 of Class ScancRefService method


QUADRO 6.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q63()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q63




getRegA6Q71 of Class ScancRefService method


QUADRO 7.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q71()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q71




getRegA6Q72 of Class ScancRefService method


QUADRO 7.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q72()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q72




getRegA6Q73 of Class ScancRefService method


QUADRO 7.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q73()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q73




getRegA6Q8 of Class ScancRefService method


QUADRO 8 - DEDUÇÃO POR OPERAÇÕES REALIZADAS POR IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q8()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q8




getRegA6Q91 of Class ScancRefService method


QUADRO 9.1 - OPERAÇÕES COM IMPOSTO RETIDO POR ESTABELECIMENTO DO EMITENTE

Definição:

Sintaxe

ScancRefService():getRegA6Q91()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q91




getRegA6Q92 of Class ScancRefService method


QUADRO 9.2 - OPERAÇÕES COM IMPOSTO RETIDO POR OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q92()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q92




getRegA6Q93 of Class ScancRefService method


QUADRO 9.3 - RELATÓRIOS EXTEMPORÂNEOS

Definição:

Sintaxe

ScancRefService():getRegA6Q93()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q93




getRegA6Q10 of Class ScancRefService method


QUADRO 10 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A DISTRIBUIDORAS

Definição:

Sintaxe

ScancRefService():getRegA6Q10()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q10




getRegA6Q11 of Class ScancRefService method


QUADRO 11 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A TRR

Definição:

Sintaxe

ScancRefService():getRegA6Q11()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q11




getRegA6Q12 of Class ScancRefService method


QUADRO 12 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A IMPORTADORES

Definição:

Sintaxe

ScancRefService():getRegA6Q12()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q12




getRegA6Q13 of Class ScancRefService method


QUADRO 13 - DEDUÇÃO POR RESSARCIMENTO EFETUADO A OUTROS CONTRIBUINTES

Definição:

Sintaxe

ScancRefService():getRegA6Q13()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q13




getRegA6Q14 of Class ScancRefService method


QUADRO 14 - DEDUÇÃO TRANSFERIDA DE OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

ScancRefService():getRegA6Q14()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q14




getRegA6Q15 of Class ScancRefService method


QUADRO 15 - DEDUÇÃO TRANSFERIDA PARA OUTRO ESTABELECIMENTO DO SUJEITO PASSIVO POR SUBSTITUIÇÃO

Definição:

Sintaxe

ScancRefService():getRegA6Q15()

Retorno

TipoDescrição
Objectobjeto com dados do registro A6Q15

Namespace backoffice.fiscal.arquivos.estadual.scancref.file


ScancRef class


Classe modelo para o arquivo SCANC Refinaria

Definição:

Sintaxe

ScancRef()




makeRecords of Class ScancRef method


Método responsável por montar os registros do arquivo

Definição:

Sintaxe

ScancRef():makeRecords(cIdGrupo,cMesAno,cUfDest,_cFilial)

Parâmetros

NomeTipoUsoDescrição
cIdGrupocharacterObrigatórioIdentificador do grupo
cMesAnocharacterObrigatórioIdentificador do período
cUfDestcharacterObrigatórioUnidade federativa do arquivo
_cFilialcharacterObrigatórioFilial para a qual o arquivo será gerado




writeRecords of Class ScancRef method


Método responsável por escrever o arquivo texto

Definição:

Sintaxe

ScancRef():writeRecords(oWriter)

Parâmetros

NomeTipoUsoDescrição
oWriterobjectObrigatórioObjeto da classe FWFileWriter responsável pela escrita no arquivo texto




writeCounters of Class ScancRef method


RODAPÉ - gera os totais de linhas de todos os registros do arquvo

Definição:

Sintaxe

ScancRef():writeCounters()




ScancTotais class


RODAPÉ - gera os totais de linhas de todos os registros do arquivo

Definição:

Sintaxe

ScancTotais()

Namespace backoffice.fiscal.arquivos.utils


AnnotationHelper class


Classe no padrão Singleton que fornece um objeto e métodos estáticos para manipulação de annotations

Definição:

Sintaxe

AnnotationHelper()




getDataAnnotation of Class AnnotationHelper method


Organiza as annotations de um objeto em um objeto HashMap de acordo com a chave de pesquisa informada

Definição:

Sintaxe

AnnotationHelper():getDataAnnotation(oObj,cAnnotationName,cKey)

Parâmetros

NomeTipoUsoDescrição
oObjObjectObrigatórioo objeto para o qual se quer obter os dados de annotation
cAnnotationNameCharacterObrigatórioo nome da annotation a ser obtida
cKeyCharacterObrigatórioo índice de pesquisa para o HashMap (deve ser uma propriedade da annotation)

Retorno

TipoDescrição
Objectretorna um objeto HashMap




getInstance of Class AnnotationHelper method


Cria uma instância (se não houver) e a fornece

Definição:

Sintaxe

AnnotationHelper():getInstance()

Retorno

TipoDescrição
Objectretorna um objeto oAnnotationHelper