MFI015 — Movimentação MFI015
Fonte
- Source:
source/MFI015/ - Form:
UMFI015.pas/UMFI015.dfm - DataModule:
UdmMFI015.pas/UdmMFI015.dfm - Package:
MFI015.dpk
Objetivo
Tela de apuracao e aproveitamento de creditos de PIS e COFINS por empresa e tipo de credito (codigos 101-399 da Receita Federal). Permite:
- Consultar saldos mensais de creditos/debitos por competencia (tabela SALDOIMPOSTO).
- Reprocessar saldos a partir dos movimentos fiscais (procedure GERA_SALDOIMPOSTO).
- Registrar destinos de utilizacao de credito (tabela SALDOUTILIZADO) ou consumir creditos disponiveis automaticamente (procedure GERA_APROVEITAMENTOCRED).
- Visualizar apuracao consolidada entre matriz e filiais (RETORNA_MATRIZEFILIAL).
Funcionalidades
- Consulta filtrada por empresa, imposto (PIS/COFINS) e tipo de credito (CD_TIPOCREDITO).
- Opcao "Apenas ultimos 12 meses" para restringir competencia.
- Opcao "Aproveitar credito entre matriz e filiais" (consolida SALDOIMPOSTO via RETORNA_MATRIZEFILIAL).
- Opcao "Visualizar apuracao consolidada" (agrega saldos multi-empresa com SUM).
- Botao "Reprocessar Saldo" recalcula SALDOIMPOSTO a partir de NOTACTB/MOVTOFISCAL/CUPOMFISCAL.
- Botao "Utilizar Credito Disponivel" chama GERA_APROVEITAMENTOCRED que distribui creditos contra debitos.
- Grids de Destino (SALDOUTILIZADO) e Origem (SALDOUTILIZADO com CD_EMPRDEST) de credito.
- Exibicao condicional de grupos conforme VL_SALDO (positivo = Destino, negativo = Origem + Aproveitamento).
Estrutura da Tela
Aba "Consulta" (pagConsulta)
Grupo: Filtros para Consulta (grpFiltros)
| Campo | Caption | Componente | Binding |
|---|---|---|---|
| Empresa | Empresa | TDBEdit + TDBEdit (ReadOnly) | cdsFILTRO.CD_EMPRESA / NM_EMPRESA |
| Imposto | Imposto | TwwDBComboBox | cdsFILTRO.TP_IMPOSTO (Items: PIS=S, COFINS=F) |
| Apenas ultimos 12 meses | Apenas ultimos 12 meses | TDBCheckBox | cdsFILTRO.ST_12MESES (S/N) |
| Aproveitar credito entre matriz e filiais | Aproveitar credito entre matriz e filiais | TDBCheckBox | cdsFILTRO.ST_CONSOLIDA (S/N) |
| Visualizar apuracao consolidada | Visualizar apuracao consolidada | TDBCheckBox (oculto por padrao) | cdsFILTRO.ST_VISUALIZACONSOLIDADA (S/N) |
| Consultar | Consultar | TBitBtn | OnClick = btnConsultarClick |
| Reprocessar Saldo | Reprocessar Saldo | TBitBtn | OnClick = btnReprocessarClick |
| (status) | Consultando saldos de Impostos. Aguarde... | TPanel | pnlStatusProc (visivel durante reprocessamento) |
Aba "Saldos" (pagSaldo) — visivel apos consulta com resultado
Cabecalho (topo)
| Campo | Caption | Componente | Binding |
|---|---|---|---|
| Tipo de Credito | Tipo de Credito | TLabel + TDBEdit + TDBEdit | cdsFILTRO.CD_TIPOCREDITO / DS_TIPOCREDITO |
Grupo: Registro de Saldo (grpRegistroSaldos)
Grid gridSALDOIMPOSTO (DataSource = dsSALDOIMPOSTO) com colunas:
| Coluna | Caption | Campo |
|---|---|---|
| Competencia | Competencia | DT_COMPETENCIA (mm/yyyy) |
| Imposto | Imposto | DS_IMPOSTO (calculado: ICMS/PIS/COFINS) |
| Vl. Credito | Vl. Credito | VL_CREDITO |
| Vl. Debito | Vl. Debito | VL_DEBITO |
| Saldo Mes | Saldo Mes | VL_SALDO |
| Credito Disponivel | Credito Disponivel | VL_CREDITODISPONIVEL |
Grupo: Destino de Credito (grpDestinoCred) — visivel quando VL_SALDO >= 0
Grid gridSALDOUTILIZADO (DataSource = dsSALDOUTILIZADO):
| Coluna | Caption | Campo |
|---|---|---|
| Competencia | Competencia | DT_UTILIZADO (mm/yyyy, editavel apenas em insert) |
| Valor Utilizado | Valor Utilizado | VL_UTILIZADO |
| Saldo | Saldo | VL_SALDO (calculado) |
| Emp. | Emp. | CD_EMPRDEST |
Grupo: Origem de Credito (grpOrigemCred) — visivel quando VL_SALDO < 0
Grid gridOrigemCredito (DataSource = dsORIGEMCRED):
| Coluna | Caption | Campo |
|---|---|---|
| Competencia | Competencia | DT_ORIGEM |
| Valor Utilizado | Valor Utilizado | VL_UTILIZADO |
| Emp. | Emp. | CD_EMPRESA |
Grupo: Aproveitamento de Credito (grpAprovCred) — visivel quando VL_SALDO < 0
| Campo | Caption | Componente | Binding |
|---|---|---|---|
| Credito Disponivel | Credito Disponivel | TDBRichEdit | tabSALDOIMPOSTO.VL_CREDITODISPONIVEL |
| Creditos Utilizados | Creditos Utilizados | TDBRichEdit | tabSALDOIMPOSTO.VL_CREDITOUSADO |
| Saldo devedor | Saldo devedor | TDBRichEdit | tabSALDOIMPOSTO.VL_CALC_RECOLHER |
| Saldo devedor + Creditos | Saldo devedor + Creditos | TDBRichEdit | tabSALDOIMPOSTO.VL_CALC_SALDODEVEDOR |
| Utilizar Credito Disponivel | Utilizar Credito Disponivel | TBitBtn | OnClick = btnUtilizarCreditoClick |
Rodape: TDBRichEdit ligado a tabSALDOIMPOSTO.DS_MENSAGEM (mensagens de validacao do saldo).
Toolbar Lateral (esquerda)
| Botao | Caption/Hint | Tecla | Acao |
|---|---|---|---|
| Novo | Novo Registro <F5> | F5 | Append em SALDOUTILIZADO (aba Saldo) ou limpa filtros (aba Consulta) |
| Salvar | Salvar Alteracoes <F6> | F6 | Post SALDOUTILIZADO + CommitRetaining |
| Excluir | Excluir Registro <F7> | F7 | Delete destino/origem de credito |
| Limpar | Cancelar Registro <F4> | F4 | Cancel em SALDOUTILIZADO |
| Procurar | Consultar <F3> | F3 | Dispara btnConsultar |
| Atualizar | Atualizar Registros <F2> | (nao ligado a F-key) | Rollback + StartTransaction + Novo |
| Imprimir | Imprimir <F8> | F8 | (sem OnClick definido) |
| Sair | Sair <F12> | F12 | Close |
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMFATUR | CD_EMPRESA | Verificado em Busca_Parametros (UdmMFI015.pas:117). Se PARMFATUR nao existir para a empresa da sessao, levanta JException E-0000 com mensagem "Os Parametros de Faturamento para a Empresa X nao estao Cadastrados [MFA001]!" e oculta botoes Novo/Salvar/Excluir. |
Regras de Negocio
Carregamento (iniciar)
- Verifica acesso
programa.tpAcesso = 2(somente leitura) — oculta btnNovo/btnSalvar/btnExcluir. - Valida existencia de PARMFATUR para
sessao.empresa.cd_empresaviaBusca_Parametros; ausente = JException. - Recupera filtros do usuario via
Recupera_FiltroPrograma(...,'MFI015')e grava emFormCloseviaGrava_FiltroPrograma. - Armazena SQL original de
tabSALDOIMPOSTOemSqlOriginalSaldoImpostopara permitir reinjecao de filtros consolidados.
cdsFILTROCD_EMPRESAValidate (UdmMFI015.pas:314)
ValidaEmpresapreenche NM_EMPRESA.- Consulta
RETORNA_MATRIZEFILIAL(:CD_EMPRESA) WHERE ST_MATRIZ = 'S': se a empresa for matriz, torna visivel ochkVisualizaConsolidada; caso contrario oculta e desmarca.
btnConsultarClick (UMFI015.pas:381)
- Exige empresa informada (JException
E-0000). - Chama
ConsultaTipoCredito(lookup dinamico viaPesquisa) para selecionar CD_TIPOCREDITO entre 101-399 (creditos vinculados a receita tributada/nao-tributada/exportacao, conforme tabelas Receita Federal). - Se
ST_VISUALIZACONSOLIDADA = 'S', envelopa SQL original comSELECT ... -1 CD_EMPRESA, SUM(...) GROUP BY DT_COMPETENCIA, CD_TIPOCREDITO, TP_IMPOSTO, DS_IMPOSTO, DT_REGISTRO, DS_MENSAGEM. - Se
ST_12MESES = 'S', adicionaAND S.DT_COMPETENCIA > DATEADD (-12 MONTH TO CURRENT_DATE). - Substitui
/*FILTROWHERE*/pelo WHERE calculado viaStringReplace. - Abre grid e ativa aba Saldos se houver resultados.
btnReprocessarClick (UMFI015.pas:559)
- Confirma via
msgCodigo('C-0000',['Deseja reprocessar saldo de impostos (PIS/COFINS)?']). DELETE FROM SALDOIMPOSTO WHERE CD_EMPRESA = <empresa>.- Executa
SELECT O_DS_MENSAGEM FROM GERA_SALDOIMPOSTO(<empresa>). - Se procedure retornar mensagem nao vazia, levanta JException
E-0000e fazRollbackRetaining; caso contrario,CommitRetaining. - Exibe
pnlStatusProccom caption "Consultando Saldos de Impostos. Aguarde..." durante o processo.
btnUtilizarCreditoClick (UMFI015.pas:677)
- Chama
GERA_APROVEITAMENTOCRED(CD_EMPRESA, DT_COMPETENCIA, TP_IMPOSTO, CD_TIPOCREDITO, ST_CONSOLIDA)que insere registros em SALDOUTILIZADO automaticamente. - Apos execucao, faz
Salvar(True)(CommitRetaining + msgCodigo('I-0047')), atualiza credito disponivel e reabre grid Origem. ST_CONSOLIDA = 'S'aproveita credito entre matriz e filiais;'N'apenas da propria empresa.
btnExcluirClick (UMFI015.pas:216)
- Somente na aba Saldo.
- Se
VL_SALDO >= 0: exclui destino (SALDOUTILIZADO). Confirmacao "Deseja realmente excluir este destino de Credito?". - Se
VL_SALDO < 0: exclui origem (ORIGEMCRED). Confirmacao "Deseja realmente excluir este origem de Credito?". - Se houver registro excluido,
Salvar(False)+I-0046.
tabSALDOUTILIZADOBeforePost (UdmMFI015.pas:365)
DT_UTILIZADOobrigatorio (JExceptionE-0000).VL_UTILIZADOobrigatorio e nao pode ser negativo.- Em INSERT, nao pode haver registro duplicado (mesma CD_EMPRESA + DT_COMPETENCIA + TP_IMPOSTO + CD_TIPOCREDITO + DT_UTILIZADO).
DT_UTILIZADO >= DT_COMPETENCIA(data de utilizacao posterior a apuracao).- Valida saldo disponivel:
VL_UTILIZADO <= VL_SALDO - SUM(VL_UTILIZADO anterior), com mensagem "Valor utilizado (X) nao pode ser maior que o credito disponivel (Y)". - Preenche FK para SALDOIMPOSTO (CD_EMPRESA, DT_COMPETENCIA, TP_IMPOSTO, CD_TIPOCREDITO).
tabSALDOIMPOSTOCalcFields (UdmMFI015.pas:155)
VL_CALC_DISPONIVEL = VL_SALDO - VL_SALDOUSADO(minimo 0).VL_CALC_RECOLHER = VL_DEBITO - VL_CREDITO(minimo 0).VL_CALC_SALDODEVEDOR = VL_CALC_RECOLHER - VL_CREDITOUSADO(minimo 0).- Chama
ValidaSaldo: seVL_SALDOUSADO > VL_SALDO, seta DS_MENSAGEM com "Saldo utilizado e maior que o credito disponivel.". - Desabilita
btnUtilizarCreditoquandoVL_CALC_SALDODEVEDOR = 0.
tabSALDOIMPOSTOAfterScroll (UdmMFI015.pas:507)
- Quando
chkVisualizaConsolidadamarcado: oculta Destino/Origem/Aproveitamento e desabilita botao. - Quando
chkConsolidamarcado: consultaSUM(VL_SALDODISPONIVEL)viaJOIN RETORNA_MATRIZEFILIAL(8)para habilitar botao Utilizar Credito entre empresas (literal 8 parece hardcoded — suspeito, verificar). - Alterna visibilidade de
grpDestinoCred(VL_SALDO >= 0) egrpOrigemCred+grpAprovCred(VL_SALDO < 0).
tabSALDOUTILIZADODT_UTILIZADOSetText (UdmMFI015.pas:493)
- Aceita entrada
mm/yyyy; prefixa01/e valida viaTryStrToDate. Formato editavel:!00/0000;1;_.
Fechamento
FormClose: sestDadosAltrados, perguntamsgCodigo('C-0048')para Commit/Rollback. ChamaGrava_FiltroProgramae libera DataModule.
Datasets e SQL
cdsFILTRO (TClientDataSet — filtros em memoria)
Campos: CD_EMPRESA, NM_EMPRESA, TP_IMPOSTO, CD_TIPOCREDITO, DS_TIPOCREDITO, DT_INICIAL, DT_FINAL, ST_12MESES, ST_CONSOLIDA, ST_VISUALIZACONSOLIDADA. Tag = 9 (persistencia via jCommon).
tabSALDOIMPOSTO (TFDQuery, CachedUpdates = True)
SQL base (com marcador /*FILTROWHERE*/ para injecao):
SELECT
S.CD_EMPRESA, S.DT_COMPETENCIA, S.CD_TIPOCREDITO, S.TP_IMPOSTO,
TRIM(CASE S.TP_IMPOSTO
WHEN 'I' THEN 'ICMS'
WHEN 'S' THEN 'PIS'
WHEN 'F' THEN 'COFINS'
ELSE '*' END) DS_IMPOSTO,
S.VL_CREDITO, S.VL_DEBITO, S.VL_SALDO, S.VL_SALDOUSADO,
COALESCE((SELECT SUM(SS.VL_UTILIZADO) FROM SALDOUTILIZADO SS
WHERE COALESCE(SS.CD_EMPRDEST,SS.CD_EMPRESA) = S.CD_EMPRESA
AND SS.DT_UTILIZADO = S.DT_COMPETENCIA
AND SS.TP_IMPOSTO = S.TP_IMPOSTO
AND SS.CD_TIPOCREDITO = S.CD_TIPOCREDITO), 0) VL_CREDITOUSADO,
COALESCE((SELECT SUM(SSI.VL_SALDODISPONIVEL) FROM SALDOIMPOSTO SSI
WHERE SSI.CD_EMPRESA = S.CD_EMPRESA
AND SSI.DT_COMPETENCIA <= S.DT_COMPETENCIA
AND SSI.TP_IMPOSTO = S.TP_IMPOSTO
AND SSI.CD_TIPOCREDITO = S.CD_TIPOCREDITO
AND SSI.VL_SALDO > 0), 0) VL_CREDITODISPONIVEL,
S.DT_REGISTRO
FROM SALDOIMPOSTO S
INNER JOIN RETORNA_MATRIZEFILIAL(:CD_EMPRESA) R ON (R.CD_EMPRESA = S.CD_EMPRESA)
WHERE S.CD_TIPOCREDITO = :CD_TIPOCREDITO
AND S.TP_IMPOSTO = :TP_IMPOSTO
/*FILTROWHERE*/
ORDER BY S.DT_COMPETENCIA
Parametros: CD_EMPRESA, CD_TIPOCREDITO, TP_IMPOSTO.
tabSALDOUTILIZADO (TFDQuery, master-detail com dsSALDOIMPOSTO)
MasterFields: CD_EMPRESA;DT_COMPETENCIA;TP_IMPOSTO;CD_TIPOCREDITO
SELECT SU.CD_EMPRESA, SU.DT_COMPETENCIA, SU.TP_IMPOSTO, SU.CD_TIPOCREDITO,
SU.DT_UTILIZADO, SU.VL_UTILIZADO,
S.VL_SALDO - (SELECT SUM(SS.VL_UTILIZADO) FROM SALDOUTILIZADO SS
WHERE SS.CD_EMPRESA = SU.CD_EMPRESA
AND SS.DT_COMPETENCIA = SU.DT_COMPETENCIA
AND SS.TP_IMPOSTO = SU.TP_IMPOSTO
AND SS.CD_TIPOCREDITO = SU.CD_TIPOCREDITO
AND SS.DT_UTILIZADO <= SU.DT_UTILIZADO) VL_SALDO,
SU.DT_REGISTRO,
CAST(NULL AS DOM_VARCHAR500) DS_MENSAGEM,
COALESCE(SU.CD_EMPRDEST, SU.CD_EMPRESA) CD_EMPRDEST, SU.NR_SEQUENCIA
FROM SALDOUTILIZADO SU
INNER JOIN SALDOIMPOSTO S ON (S.CD_EMPRESA = SU.CD_EMPRESA
AND S.DT_COMPETENCIA = SU.DT_COMPETENCIA
AND S.TP_IMPOSTO = SU.TP_IMPOSTO
AND S.CD_TIPOCREDITO = SU.CD_TIPOCREDITO)
WHERE SU.CD_EMPRESA = :CD_EMPRESA
AND SU.DT_COMPETENCIA = :DT_COMPETENCIA
AND SU.TP_IMPOSTO = :TP_IMPOSTO
AND SU.CD_TIPOCREDITO = :CD_TIPOCREDITO
ORDER BY SU.DT_UTILIZADO
UpdateSQL updSALDOUTILIZADO gera INSERT/UPDATE/DELETE em SALDOUTILIZADO com chave composta (CD_EMPRESA, CD_TIPOCREDITO, DT_COMPETENCIA, DT_UTILIZADO, TP_IMPOSTO, NR_SEQUENCIA). DT_REGISTRO = literal 'NOW'.
tabORIGEMCRED (TFDQuery — destinos que consumiram credito desta apuracao)
SELECT SU.CD_EMPRESA, SU.DT_COMPETENCIA, SU.TP_IMPOSTO, SU.CD_TIPOCREDITO,
SU.DT_UTILIZADO, SU.DT_COMPETENCIA DT_ORIGEM,
SU.VL_UTILIZADO, SU.CD_EMPRDEST, NR_SEQUENCIA
FROM SALDOUTILIZADO SU
WHERE COALESCE(SU.CD_EMPRDEST, SU.CD_EMPRESA) = :CD_EMPRESA
AND SU.DT_UTILIZADO = :DT_COMPETENCIA
AND SU.TP_IMPOSTO = :TP_IMPOSTO
AND SU.CD_TIPOCREDITO = :CD_TIPOCREDITO
ORDER BY SU.DT_COMPETENCIA
Observacoes tecnicas
FormatOptions.StrsEmpty2Null = TrueeMaxBcdPrecision = 14no fdCon (BCD para valores monetarios).- Transacao com
Isolation = xiReadCommitted, AutoStart manual. dsSALDOIMPOSTO.OnUpdateDatasetafrmMFI015.stDadosAltrados := Truepara controle de commit em FormClose.
Tabelas de Escrita (INSERT/UPDATE/DELETE)
| Tabela | Operacoes |
|---|---|
| SALDOIMPOSTO | DELETE, SELECT |
| SALDOUTILIZADO | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| PARMFATUR | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| GERA_APROVEITAMENTOCRED | SALDOIMPOSTO (SELECT), SALDOUTILIZADO (INSERT/SELECT) |
| GERA_SALDOIMPOSTO | CUPOMFISCAL (SELECT), IMPOSTO (SELECT), IMPOSTONOTACTB (SELECT), MOVTOFISCAL (SELECT), NOTACTB (SELECT) |
| RETORNA_MATRIZEFILIAL | EMPRESA (SELECT), PARMCONTABIL (SELECT), PESSOA (SELECT) |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| CUPOMFISCAL | SELECT |
| EMPRESA | SELECT |
| IMPOSTO | SELECT |
| IMPOSTONOTACTB | SELECT |
| MOVTOFISCAL | SELECT |
| NOTACTB | SELECT |
| PARMCONTABIL | SELECT |
| PESSOA | SELECT |
| SALDOIMPOSTO | SELECT |
| SALDOUTILIZADO | INSERT, SELECT |
Dependencias Aferentes
Nenhuma dependencia aferente identificada — MFI015 nao e chamado por outros módulos BPL (nao consta em jMenu.pas como item de menu e nao aparece em LoadPackage/carregarPrograma de outros .pas). Invocado provavelmente via menu dinamico ou acesso direto (programa cadastrado via ADM*).
Dependencias Eferentes
Nenhuma dependencia eferente direta em outros módulos BPL. A tela consome exclusivamente dados proprios (SALDOIMPOSTO, SALDOUTILIZADO) e procedures fiscais (GERA_SALDOIMPOSTO reprocessa a partir de movimentos fiscais gerados por outras telas de faturamento/fiscal, ex: MNF001, MNF004, MFI004, MFI005, MFI011 — acesso indireto via tabelas CUPOMFISCAL/MOVTOFISCAL/NOTACTB).