Pular para o conteúdo principal

MFI016 — Movimentação MFI016

Fonte​

  • Form principal: source/MFI016/UMFI016.pas (UMFI016.dfm)
  • DataModule: source/MFI016/UdmMFI016.pas (UdmMFI016.dfm)
  • Detalhamento (modal): source/MFI016/UfrmDetalhamento.pas (UfrmDetalhamento.dfm)
  • Pacote BPL: source/MFI016/MFI016.dpk
  • Shared units: jCommon (jSessao, jDB, jMessage, jLista, jUtils, jValidate), jPesquisa (Busca)

Objetivo​

Cadastrar e manter processos judiciais referenciados no SPED Contribuicoes (PIS/COFINS) que conferem exigibilidade suspensa sobre contribuicoes. Cada processo registra dados da acao (numero, secao, vara, natureza, sentenca e vigencia) e, em uma janela de detalhamento, as operacoes fiscais afetadas (nota fiscal, item, bases e aliquotas de PIS/COFINS originais e determinadas judicialmente) para posterior geracao dos registros 1010/1020 do SPED.

Funcionalidades​

  • Incluir, alterar e consultar processos judiciais SPED por empresa.
  • Vincular itens (operacoes) a cada processo via janela Detalhamento, importando dados de notas fiscais ja lancadas (NF-e / CT-e autorizados).
  • Controlar vigencia do processo (data da sentenca, data inicial e data final de vigencia) com validacao cruzada de datas.
  • Gerar numero sequencial do lancamento via GERA_SEQUENCIA('SEQ_PROCESSOREFSPED').
  • Validar empresa, pessoa, item e CST de PIS/COFINS (original e judicial) usando lookups da jPesquisa (F9).
  • Calcular automaticamente VL_CALCPIS, VL_CALCPISJUD, VL_CALCCOFINS e VL_CALCCOFINSJUD como base * aliquota / 100 (campos calculados do grid de itens).

Estrutura da Tela​

Barra de ferramentas (toolbar)​

BotaoCaption/HintAtalhoAcao
NovoNovo Registro <F5>F5Append em PROCESSOREFSPED
SalvarSalvar Alteracoes <F6>F6Post + CommitRetaining + reabre grid
ExcluirExcluir Registro <F7>F7(oculto no iniciar, nao implementado)
LimparCancelar Registro <F4>F4Cancel do dataset em edicao
ConsultarConsultar <F3>F3(oculto no iniciar)
AtualizarAtualizar Registros <F2>F2Rollback + StartTransaction + reabre
ImprimirImprimir <F8>F8(oculto no iniciar)
SairSair <F12>F12Close

Grupo "Dados do Processo" (grpDADOS)​

Campo (label)FocusControlDataFieldTipoObrig.
N LanctoedtNR_LANCAMENTONR_LANCAMENTOinteiro (readonly)auto
EmpresaedtCD_EMPRESACD_EMPRESA + NM_EMPRESAinteiro + descricaoSim
SPEDcmbTP_SPEDTP_SPEDcombo: "Contribuicoes (PIS/COFINS) / C"-
TipocmbTP_TIPOTP_TIPOcombo: "Acao Judicial / A"-
ProcessoedtDS_PROCESSODS_PROCESSOtextoSim
Secao JudiciariaedtDS_SECAOJUDICDS_SECAOJUDICtextoSim
Vara JudicialedtDS_VARADS_VARAtexto (2 chars)Sim
Efeitos TributariosedtDS_EFEITOTRIBDS_EFEITOTRIBtexto-
Natureza da AcaocmbTP_NATUACAOTP_NATUACAOcombo (17 opcoes: 01-09, 12-17, 19, 99)-
Data SentencaedtDT_SENTENCADT_SENTENCAdata-
Data Inicial de VigenciaedtDT_VIGENCIAINICIALDT_VIGENCIAINICIALdataSim
Data Final de VigenciaedtDT_VIGENCIAFINALDT_VIGENCIAFINALdata-

Grupo "Consulta de Processos" (grpCONSULTA)​

  • Grid gridETAPASFILTRO lista processos ja cadastrados na empresa (colunas: N Lancto, SPED, Tipo, Processo, Sentenca, Vigencia Inicial, Vigencia Final).
  • Subgrupo "Detalhamento das Contribuicoes com Exigibilidade Suspensa":
    • Grid DBGrid1 mostra itens (operacoes) do processo selecionado (Data, Registro, N Nota, Produto, descricao).
    • Botao Detalhamento abre a janela modal TfrmDetalhamento para incluir/alterar item.

Janela modal "Detalhamento" (UfrmDetalhamento)​

Aberta pelo botao Detalhamento do form principal. Permite informar todos os dados da operacao (nota fiscal, item, valor, CST e aliquotas) e possui duas abas:

  • Aba CST PIS (tabCSTPIS) — blocos "PIS - Efetivamente aplicado" e "PIS - Determinado pela decisao judicial" (campos CST, base, aliquota, valor para PIS escriturado e PIS judicial).
  • Aba CST COFINS (tabCSTCOFINS) — mesma estrutura para COFINS (COFINS original + COFINS judicial).

Demais campos: Registro SPED, Chave de Acesso, Pessoa (lookup F9 = PESSOA), Data da Operacao, N Nota Fiscal (F9 = NOTAFISCAL_E), Serie, Especie, Valor da Operacao, Produto (F9 = ITEM ou ITEMNOTA quando ha nota), Conta Contábil (F9 = PLANOCONTAS), Observacoes. Botao Limpar Nota reabre os campos de identificacao da NF quando a nota esta vinculada.

Parametros que Influenciam​

Nenhum parametro de tabelas PARM*/CONFIG* e consultado pelo codigo. A tela depende apenas do contexto da sessao (sessao.empresa.cd_empresa, sessao.usuario.cd_usuario) e dos dados da empresa corrente.

Regras de Negocio​

  1. Defaults no Append do processo (tabPROCESSOREFSPEDAfterInsert): CD_EMPRESA = sessao.empresa.cd_empresa, TP_SPED = 'C' (Contribuicoes), TP_TIPO = 'A' (Acao Judicial), TP_NATUACAO = '01' (Transito em julgado favoravel).
  2. Confirmacao ao editar (tabPROCESSOREFSPEDBeforePost): em dsEdit, pergunta "O Processo ja Esta Gravado! Deseja Realmente Alterar?"; se usuario recusa, cancela e lanca E-0000 "Processo Cancelado!".
  3. Campos obrigatorios no processo: DS_PROCESSO, DS_SECAOJUDIC, DS_VARA, DT_VIGENCIAINICIAL e CD_EMPRESA — cada um com SetFocus no campo e JException especifica.
  4. Geracao do numero de lancamento (somente em dsInsert): transactionGeral independente; chama GERA_SEQUENCIA(NULL, 'SEQ_PROCESSOREFSPED'); se V_DS_MENSAGEM <> '' lanca E-0000 com a mensagem da procedure; atribui V_NR_SEQUENCIA a NR_LANCAMENTO.
  5. Validacao cruzada de datas (3 handlers OnValidate): Sentenca <= Vigencia Inicial <= Vigencia Final; violacoes lancam E-0000 com a mensagem da regra violada.
  6. Lookup de Empresa via F9 (edtCD_EMPRESAKeyDown): busca EMPRESAUSUARIO com sessao.usuario.cd_usuario; retorno preenche CD_EMPRESA e ValidaEmpresa carrega NM_EMPRESA.
  7. Bloqueio da empresa apos selecao (tabPROCESSOREFSPEDAfterScroll): HabilitaCampo(edtCD_EMPRESA, False) quando ha CD_EMPRESA preenchido no registro corrente.
  8. Itens (ITEMPROCESSO) AfterInsert: se o processo-pai esta em dsInsert/dsEdit, faz Post do pai antes de habilitar campos da janela Detalhamento e esconde btnLimparNota.
  9. Numero do item na gravacao (tabITEMPROCESSOBeforePost): NR_LANCAMENTO = pai.NR_LANCAMENTO; CD_OPERACAO = GerarSequencia('SEQ_ITEMPROCESSOREFSPED'); copia VL_CALCPIS/JUD/COFINS/JUD calculados para VL_PIS/JUD/COFINS/JUD.
  10. Validacao de nota fiscal no item (procedure privada ValidaNota, chamada pelo BeforePost do item): quando NR_NOTAFISCAL, CD_SERIE, NR_CHAVEACESSO e CD_ESPECIE estao preenchidos, consulta NOTA+NFE+CTRC filtrando por empresa/pessoa/numero/serie/especie e exige ST_NOTA = 'V'; se nao localizada, lanca E-0000 "Nota Fiscal Eletronica Nao Encontrada!"; se chave de acesso divergente, lanca E-0000 "Chave de Acesso da Nota Fiscal Eletronica divergente!".
  11. Carga automatica de dados da nota (CarregaDadosNota, disparado nos OnValidate de NR_NOTAFISCAL, CD_SERIE, CD_ESPECIE): faz COUNT(*) em NOTA LEFT JOIN NFE/CTRC exigindo nota autorizada (protocolo ou CT-e/NF-e autorizado); se encontra 1 resultado, preenche automaticamente NR_NOTAFISCAL, NR_LANCTONOTA, CD_SERIE, CD_ESPECIE, CD_PESSOA, DT_OPERACAO e NR_CHAVEACESSO e chama HabilitaCamposNota(False).
  12. Amarracao Item x Nota (tabITEMPROCESSOCD_ITEMValidate): quando ha NR_LANCTONOTA, consulta ITEMNOTA + MOVIMENTACAO + HISTORICO para garantir que o item pertence a nota e, se sim, carrega CD_CONTACONTABIL de HISTORICO.CD_CONTACREDITO; caso contrario, foca em edtCD_PRODUTO e lanca E-0000 "O Item informado nao pertence a Nota!".
  13. Validacoes FK com utilitarios jValidate: CD_EMPRESA via ValidaEmpresa, CD_PESSOA via ValidaPessoa, CD_ITEM via ValidaItem, CD_CSTPIS/PISJUD/COFINS/COFINSJUD via ValidaCst — todas preenchem descricoes auxiliares e limpam quando o campo e vazio.
  14. Calculo de tributos (tabITEMPROCESSOCalcFields): VL_CALCPIS = VL_BASEPIS * PC_ALIQPIS / 100 (e analogos para PIS-JUD, COFINS, COFINS-JUD). Os campos VL_PIS* reais sao atualizados a partir dos calculados somente no BeforePost.
  15. Salvamento do item (TfrmDetalhamento.btnSalvarClick): valida na ordem DT_OPERACAO, VL_OPERACAO, CD_CSTPIS, CD_CSTPISJUD (aba PIS), CD_CSTCOFINS, CD_CSTCOFINSJUD (aba COFINS); quando ha nota vinculada, reaplica HabilitaCamposNota(False); faz CommitRetaining e exibe I-0047.
  16. Botao "Limpar Nota" (btnLimparNotaClick): libera a amarracao com a NF, limpando NR_NOTAFISCAL, CD_SERIE, CD_ESPECIE, CD_PESSOA, DT_OPERACAO, NR_CHAVEACESSO, NR_LANCTONOTA, TP_NOTA e CD_ITEM; reabilita os campos de identificacao.
  17. Exclusao de item (TfrmDetalhamento.btnExcluirClick): Delete direto + CommitRetaining + I-0046 (sem confirmacao adicional).
  18. Fechamento do form principal (TfrmMFI016.FormClose): se houver alteracao pendente no processo, pergunta C-0000 "Deseja Salvar as Alteracoes Pendentes?"; em seguida Rollback da transacao, Free do DataModule e descarregarPrograma.

Datasets e SQL​

tabPROCESSOREFSPED (TFDQuery, UpdateObject updPROCESSOREFSPED)​

Filtrado por COALESCE(P.CD_EMPRESA, :CD_EMPRESA) = :CD_EMPRESA e ordenado por NR_LANCAMENTO. Traz descricoes derivadas (DS_TPSPED, DS_TPTIPO, DS_TPNATUACAO) via CASE.

SELECT P.CD_EMPRESA, E.NM_EMPRESA,
P.NR_LANCAMENTO, P.TP_SPED, P.TP_TIPO, P.DS_PROCESSO,
P.DS_SECAOJUDIC, P.DS_VARA, P.TP_NATUACAO, P.DS_EFEITOTRIB,
P.DT_SENTENCA, P.DT_VIGENCIAINICIAL, P.DT_VIGENCIAFINAL,
CASE P.TP_SPED WHEN 'C' THEN 'Contribuicoes (PIS/COFINS)' END DS_TPSPED,
CASE P.TP_TIPO WHEN 'A' THEN 'Acao Judicial' END DS_TPTIPO,
CASE P.TP_NATUACAO WHEN '01' THEN 'Decisao Judicial Transitada em Julgado...'
WHEN '02' THEN 'Decisao Judicial nao Transitada em Julgado...'
...
WHEN '99' THEN 'Outros' END DS_TPNATUACAO
FROM PROCESSOREFSPED P
LEFT JOIN EMPRESA E ON (E.CD_EMPRESA = P.CD_EMPRESA)
WHERE COALESCE(P.CD_EMPRESA, :CD_EMPRESA) = :CD_EMPRESA
ORDER BY P.NR_LANCAMENTO

updPROCESSOREFSPED define INSERT, UPDATE e DELETE parametrizados em PROCESSOREFSPED.

tabITEMPROCESSO (TFDQuery master-detail de PROCESSOREFSPED por NR_LANCAMENTO)​

Carrega itens com descricoes de item, pessoa e CSTs (PIS/PIS-JUD/COFINS/COFINS-JUD):

SELECT IPR.NR_LANCAMENTO, IPR.CD_OPERACAO, IPR.CD_REGISTROSPED, IPR.NR_NOTAFISCAL,
IPR.NR_LANCTONOTA, IPR.TP_NOTA, IPR.CD_SERIE, IPR.CD_ESPECIE, IPR.NR_CHAVEACESSO,
IPR.CD_PESSOA, P.NM_PESSOA, IPR.CD_ITEM, I.DS_ITEM,
IPR.DT_OPERACAO, IPR.VL_OPERACAO,
IPR.CD_CSTPIS, CSTPIS.DS_CST DS_CSTPIS, IPR.VL_BASEPIS, IPR.PC_ALIQPIS, IPR.VL_PIS,
IPR.CD_CSTPISJUD, CSTPISJ.DS_CST DS_CSTPISJUD, IPR.VL_BASEPISJUD, IPR.PC_ALIQPISJUD, IPR.VL_PISJUD,
IPR.CD_CSTCOFINS, CSTCOFINS.DS_CST DS_CSTCOFINS, IPR.VL_BASECOFINS, IPR.PC_ALIQCOFINS, IPR.VL_COFINS,
IPR.CD_CSTCOFINSJUD, CSTCOFINSJ.DS_CST DS_CSTCOFINSJUD, IPR.VL_BASECOFINSJUD, IPR.PC_ALIQCOFINSJUD, IPR.VL_COFINSJUD,
IPR.CD_CONTACONTABIL, IPR.DS_OBSOPERACAO
FROM ITEMPROCESSOREFSPED IPR
LEFT JOIN ITEM I ON (I.CD_ITEM = IPR.CD_ITEM)
LEFT JOIN PESSOA P ON (P.CD_PESSOA = IPR.CD_PESSOA)
LEFT JOIN CST CSTPIS ON (CSTPIS.CD_CST = IPR.CD_CSTPIS)
LEFT JOIN CST CSTPISJ ON (CSTPISJ.CD_CST = IPR.CD_CSTPISJUD)
LEFT JOIN CST CSTCOFINS ON (CSTCOFINS.CD_CST = IPR.CD_CSTCOFINS)
LEFT JOIN CST CSTCOFINSJ ON (CSTCOFINSJ.CD_CST = IPR.CD_CSTCOFINSJUD)
WHERE IPR.NR_LANCAMENTO = :NR_LANCAMENTO

updITEMPROCESSO define INSERT/UPDATE/DELETE parametrizados em ITEMPROCESSOREFSPED.

Consultas dinamicas no DataModule (codigo)​

  • ValidaNota e CarregaDadosNota (em UdmMFI016.pas e UfrmDetalhamento.pas): SELECT de NOTA + LEFT JOIN NFE/CTRC + PESSOA com filtro N.ST_NOTA = 'V' e CASE para aceitar apenas notas/CT-e autorizadas.
  • tabITEMPROCESSOCD_ITEMValidate: SELECT em ITEMNOTA + ITEM + MOVIMENTACAO + HISTORICO para herdar a conta contábil de credito do historico da movimentação.

Transacoes​

  • transaction (principal): cobre a sessao inteira do form.
  • transactionGeral (auxiliar): isolada, usada apenas para chamar GERA_SEQUENCIA no BeforePost em dsInsert (rollback preventivo antes de StartTransaction).

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoes
ITEMPROCESSOREFSPEDDELETE, INSERT, SELECT, UPDATE
PROCESSOREFSPEDDELETE, INSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
CSTSELECT
CTRCSELECT
EMPRESASELECT
HISTORICOSELECT
ITEMSELECT
ITEMNOTASELECT
MOVIMENTACAOSELECT
NFESELECT
NOTASELECT
PESSOASELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
GERA_SEQUENCIASEQUENCIA (SELECT/UPDATE)

Alem da procedure registrada, o codigo invoca a funcao GerarSequencia(transaction, 'SEQ_ITEMPROCESSOREFSPED') (wrapper de jDB) para numerar CD_OPERACAO de cada item.

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
SEQUENCIASELECT, UPDATE

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem nas tabelas lidas por MFI016 (CST, CTRC, EMPRESA, HISTORICO, ITEM, ITEMNOTA, MOVIMENTACAO, NFE, NOTA, PESSOA). Limitado a 30 telas mais conectadas.

TelaTabelas em Comum
CNF001EMPRESA, ITEM, ITEMNOTA, MOVIMENTACAO, NFE, NOTA, PESSOA
CNF012CTRC, EMPRESA, ITEM, ITEMNOTA, MOVIMENTACAO, NOTA, PESSOA
MNF001CST, EMPRESA, ITEM, ITEMNOTA, NFE, NOTA, PESSOA
MNF011EMPRESA, ITEM, ITEMNOTA, MOVIMENTACAO, NOTA, PESSOA
MNF030EMPRESA, ITEM, ITEMNOTA, NFE, NOTA, PESSOA
MNF024EMPRESA, ITEM, ITEMNOTA, MOVIMENTACAO, NOTA
MNF032CTRC, ITEMNOTA, NFE, NOTA, PESSOA
CPD001EMPRESA, ITEM, MOVIMENTACAO, NFE, PESSOA
CNF011EMPRESA, ITEM, NOTA, PESSOA
CNF017EMPRESA, ITEM, NOTA, PESSOA
MNF019EMPRESA, ITEMNOTA, NFE, NOTA
MNF023EMPRESA, ITEMNOTA, NOTA, PESSOA
MNF029EMPRESA, ITEMNOTA, NOTA, PESSOA
MPD011EMPRESA, ITEMNOTA, NOTA, PESSOA
MRC020EMPRESA, ITEMNOTA, NOTA, PESSOA
MTR004ITEMNOTA, NFE, NOTA, PESSOA
RFC040EMPRESA, ITEM, MOVIMENTACAO, NOTA
MNF016EMPRESA, ITEM, ITEMNOTA, PESSOA
CPD002EMPRESA, ITEM, MOVIMENTACAO, PESSOA
CPD003EMPRESA, ITEM, MOVIMENTACAO, PESSOA
CPD005EMPRESA, ITEM, MOVIMENTACAO, PESSOA
MPD084EMPRESA, ITEM, MOVIMENTACAO, PESSOA
RNF002EMPRESA, HISTORICO, ITEM, PESSOA
RNF005EMPRESA, HISTORICO, ITEM, PESSOA
RNF006EMPRESA, ITEM, MOVIMENTACAO, PESSOA
RNF012EMPRESA, ITEM, MOVIMENTACAO, PESSOA
RNF038EMPRESA, ITEM, MOVIMENTACAO, PESSOA
RPD001EMPRESA, ITEM, MOVIMENTACAO, PESSOA
RPD003EMPRESA, ITEM, MOVIMENTACAO, PESSOA
RPD005EMPRESA, ITEM, MOVIMENTACAO, PESSOA

+540 telas adicionais (muitas telas do ERP escrevem em tabelas mestras como ITEM, PESSOA, EMPRESA e nas tabelas de NF/movimentação).

Dependencias Eferentes (quem consome dados desta tela)​

Nenhuma outra tela mapeada le as tabelas PROCESSOREFSPED ou ITEMPROCESSOREFSPED. O consumo ocorre fora do ERP desktop — os dados alimentam a geracao dos registros 1010/1020 do SPED Contribuicoes (módulo fiscal/SPED), que atualmente nao aparece no mapeamento de telas.