Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Totvs custom tabs box
tabsImplementação,Imagens
idsfiltros_implementacao,filtros_imagens
Totvs custom tabs box items
defaultyes
referenciafiltros_implementacao

Front-End:

Os campos do filtro serão construídos com o componente DynamicForm do PO UI. Ao carregar a tela, será necessário chamar uma API que recupera os filtros já salvos pelo usuário. Caso o endpoint retorne vazio, significa que o usuário ainda não salvou nenhum filtro. 

Por questão de performance, os endpoints dos selects/multiselects vão ser chamados somente quando clicados nos inputs. 

Os campos serão por seleção, ou seja, o usuário poderá selecionar todos os itens ou um item específico. Os inputs serão construídos com o módulo MultiSelect do PO UI. (#001)

Abaixo todos os filtros que vão estar disponíveis para configuração:

  • Filial (multiselect)
  • Data (de/até) (date)
  • Conta contábil (multiselect)
  • Moeda (select)
  • Conciliar por (select) (dependendo do filtro, abrirá um novo campo para o usuário colocar o número do processo ou extrato bancário) (#003), (#028)
  • Lançamento Padrão (multiselect) (#006)
  • Filtra entidade (select boolean)
  • Centro de custo (multiselect)
  • Item contábil (multiselect)
  • Clvl (multiselect)
  • Registros conciliados (select boolean) (#004)
  • Lote (#002)
  • Valor mínimo (#019)
  • Valor máximo (#019)

Teremos um filtro de valor mínimo e valor máximo para que o sistema desconsidere a divergência de valores (caso haja) nos itens conciliados automaticamente. (#019)

Como citado acima, após salvar o formulário, o front fará uma requisição para o back-end enviando os dados que o usuário selecionou nos filtros. Quando o usuário acessar novamente, os filtros estarão salvos. (#007)

Cada campo terá um parâmetro onde será possível adicionar um texto de ajuda para aquele campo específico. O local de exibição da ajuda na tela ainda não está definido. (#008)


Back-End:

Será necessário uma API para salvar os filtros do usuário e uma outra API para recuperar o filtro já salvo.

Para que o filtro que o usuário realizou reflita nos grids, o front vai chamar as APIs que trazem as informações dos grids passando os valores dos filtros como query strings, assim a API vai saber o que filtrar na hora de trazer o resultado.

Os filtros deverão possuir help para facilitar entendimento do usuário.


Serão necessárias disponibilidade das APIs abaixo:

  • API para informações de Filiais (SM0)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
    "Branch": [
        {
            "BranchId":"D MG 01"
        },
        {
           "BranchId":"D RJ 01"
        },
        {
            "BranchId":"M PR 01"
        },
        {
            "BranchId":"M SP 01"
        }      
    ]
}


  • API para informações do Plano de Contas Contábeis (CT1)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
	{ "BranchId": "D MG 01"},
	{ "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"AccountantAccounts": [
		{
            "InternalId": "T1|D MG 01|000001",
			"BranchId":"D MG 01",
			"Code":"000001"
        },
        {
         	"InternalId": "T1|D MG 01|000003",
			"BranchId":"D MG 01",
			"Code":"000003"
        },
        {
          	"InternalId": "T1|D MG 01|000005",
			"BranchId":"D MG 01",
			"Code":"000005"
        },
        {
            "InternalId": "T1|D RJ 02|000001",
			"BranchId":"D RJ 02",
			"Code":"000001"
        },
	    {
            "InternalId": "T1|D RJ 02|000005",
			"BranchId":"D RJ 02",
			"Code":"000005"
        }  
    ]
}


  • API para informações de Lançamento Padrão (CT5)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"StandardReleases": [
        {
            "InternalId": "T1|D MG 01|595",
			"BranchId":"D MG 01",
			"Code":"595"
        },
        {
           	"InternalId": "T1|D MG 01|596",
			"BranchId":"D MG 01",
			"Code":"596"
        },
        {
           	"InternalId": "T1|D MG 01|598",
			"BranchId":"D MG 01",
			"Code":"598"
        },
        {
            "InternalId": "T1|D RJ 02|595",
			"BranchId":"D RJ 02",
			"Code":"595"
        },
	    {
            "InternalId": "T1|D RJ 02|597",
			"BranchId":"D RJ 02",
			"Code":"597"
        }  
    ]
}


  • API para informações de Centro de Custo (CTT)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"CostCenters": [
        {
            "InternalId": "T1|D MG 01|CC000001",
			"BranchId":"D MG 01",
			"Code":"CC000001"
        },
        {
           	"InternalId": "T1|D MG 01|CC000002",
			"BranchId":"D MG 01",
			"Code":"CC000002"
        },
        {
           	"InternalId": "T1|D MG 01|CC000005",
			"BranchId":"D MG 01",
			"Code":"CC000005"
        },
        {
            "InternalId": "T1|D RJ 02|CC000002",
			"BranchId":"D RJ 02",
			"Code":"CC000002"
        },
	    {
            "InternalId": "T1|D RJ 02|CC000003",
			"BranchId":"D RJ 02",
			"Code":"CC000003"
        }  
    ]
}


  • API para informações de Itens Contábeis (CTD)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"AccountingItems": [
        {
            "InternalId": "T1|D MG 01|CTD00001",
			"BranchId":"D MG 01",
			"Code":"CTD00001"
        },
        {
           	"InternalId": "T1|D MG 01|CTD00005",
			"BranchId":"D MG 01",
			"Code":"CTD00005"
        },
        {
           	"InternalId": "T1|D MG 01|CTD00008",
			"BranchId":"D MG 01",
			"Code":"CTD00008"
        },
        {
            "InternalId": "T1|D RJ 02|CTD00001",
			"BranchId":"D RJ 02",
			"Code":"CTD00001"
        },
	    {
            "InternalId": "T1|D RJ 02|CTD00002",
			"BranchId":"D RJ 02",
			"Code":"CTD00002"
        }  
    ]
}


  • API para informações de Classe de Valor (CTH)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"ValueClasses": [
        {
            "InternalId": "T1|D MG 01|CTH00001",
			"BranchId":"D MG 01",
			"Code":"CTH00001"
        },
        {
           	"InternalId": "T1|D MG 01|CTH00005",
			"BranchId":"D MG 01",
			"Code":"CTH00005"
        },
        {
            "InternalId": "T1|D MG 01|CTH00008",
			"BranchId":"D MG 01",
			"Code":"CTH00008"
        },
        {
            "InternalId": "T1|D RJ 02|CTH00001",
			"BranchId":"D RJ 02",
			"Code":"CTH00001"
        },
	    {
            "InternalId": "T1|D RJ 02|CTH00002",
			"BranchId":"D RJ 02",
			"Code":"CTH00002"
        }  
    ]
}


  • API para informações de Moedas (SMO)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"Currencies": [
        {
            "InternalId": "T1|D MG 01|01",
			"BranchId":"D MG 01",
			"Code":"01"
        },
        {
           	"InternalId": "T1|D MG 01|02",
			"BranchId":"D MG 01",
			"Code":"02"
        },
        {
           	"InternalId": "T1|D MG 01|03",
			"BranchId":"D MG 01",
			"Code":"03"
        },
        {
            "InternalId": "T1|D RJ 02|01",
			"BranchId":"D RJ 02",
			"Code":"01"
        },
	    {
            "InternalId": "T1|D RJ 02|02",
			"BranchId":"D RJ 02",
			"Code":"02"
        }  
    ]
}


  • API para informações bancárias (SA6) com a opção Get (#014)
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"Banks": [
        {
            "InternalId": "T1|D MG 01|001|00001|0000000001,
			"BranchId":"D MG 01",
			"Code":"001",
			"Number":"00001",
			"AccountCode":"0000000001"
        },
        {
           	"InternalId": "T1|D MG 01|002|00001|0000000001,
			"BranchId":"D MG 01",
			"Code":"002",
			"Number":"00001",
			"AccountCode":"0000000001"
        },
        {
           	"InternalId": "T1|D MG 01|001|00002|0000000010,
			"BranchId":"D MG 01",
			"Code":"001",
			"Number":"00002",
			"AccountCode":"0000000010"
        },
        {
            "InternalId": "T1|D MG 01|001|00001|0000000005,
			"BranchId":"D RJ 02",
			"Code":"001",
			"Number":"00001",
			"AccountCode":"0000000005"
        },
	    {
            "InternalId": "T1|D MG 01|001|00003|0000000008,
			"BranchId":"D RJ 02",
			"Code":"001",
			"Number":"00003",
			"AccountCode":"0000000008"
        }  
    ]
}


API para informações de Lotes Contábeis (SX5, tabela 09)

Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
[
"InternalId": "T1",
"CompanyId": "T1",
"Branchs": [
    { "BranchId": "D MG 01"},
    { "BranchId": "D RJ 02"}
]
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response
linenumberstrue
collapsetrue
{
	"Batches": [
        {
            "InternalId": "T1||8850,
			"BranchId":"",
			"Code":"8850"
        },
        {
           	"InternalId": "T1||8800,
			"BranchId":"",
			"Code":"8800"
        },
        {
           	"InternalId": "T1||8860,
			"BranchId":"",
			"Code":"8860"
        }
    ]
}



Informações
titleAtenção

As APIs que forem disponibilizadas para clientes deverão ser desenvolvidas e documentadas conforme padrão de Api Totvs

Totvs custom tabs box items
defaultno
referenciafiltros_imagens

...

Totvs custom tabs box
tabsImplementação,Grid, Modal de Confirmação, Alerta de Status
idsgrid_implementacao,grid_imagem,grid_modal,grid_alert
Totvs custom tabs box items
defaultyes
referenciagrid_implementacao

Front-end:

A tabela será construída com o componente Table do PO UI. Na aba Exemplos já existe um exemplo de como construir a tabela no mesmo modelo que o especificado.

Antes do usuário ter acesso as informações do grid, ele precisa primeiro preencher os filtros para que sejam retornados os valores conforme o filtro ele selecionou.

Como citado na seção de filtros, é necessário o front passar uma query string com os filtros selecionados na chamada desses endpoints para que eles realizem o filtro de registros ao buscar no banco de dados.

No final de cada linha, teremos um botão "..." que conterá mais ações que o usuário poderá realizar com o registro selecionado, como Edição, Exclusão, Impressão, etc (as ações citadas estão pendentes de um protótipo de alta fidelidade no Figma com as telas das ações).

O usuário poderá configurar a exibição das colunas conforme a sua preferência. Após o usuário alterar a visibilidade das colunas e fechar o modal de configuração, o front enviará para a API as colunas que o usuário selecionou, e da próxima vez que ele atualizar a tela, a API vai trazer essas informações com as colunas que o usuário selecionou. O usuário poderá resetar a seleção de colunas abrindo o gerenciador de colunas e clicando em "restaurar padrão". (#022)

Na tabela de lançamentos contábeis, será possível adicionar lançamentos manuais, para que seja possível conciliar com a tabela de origem. (#009)

Acima das tabelas, teremos um combobox onde o usuário poderá filtrar por registros conciliados ou não conciliados. O front fará o filtro sozinho, sem o auxilio da API. (#011)

Após clicar no botão "Conciliar", um modal (aba 3) será exibido para que o usuário confirme sua ação. O modal será construído com o componente Modal do PO UI. Depois da confirmação do usuário, o sistema irá exibir um alerta para o usuário informando o usuário sobre o resultado da ação (aba 4). O alerta será construído com o Interceptor do PO UI, em conjunto com o back-end.

Abaixo dos grids, haverá dois totalizadores que vão calcular o valor de cada grid respectivamente. (#012).

Grid deverá possuir uma opção na parte superior para "Marcar Todos" ou marcar registro individual no check do próprio item (#015).  

Ao clicar no item origem ou destino, este item e seu correspondente na outra grid devem mudar de cor, dessa forma, facilitará a identificação (#016, #020).

Grid deve apresentar uma coluna "CTB" nos registros de origem, para indicar quando já foram contabilizados (#017).

Quando o valor da contabilização não bater com o valor origem, item deve apresentar uma cor diferente para identificação de divergências (#018).

Será possível realizar a exportação das tabelas via excel. Ao exportar o arquivo, os matches precisam estar alinhados para facilitar a visualização. No arquivo também terá a informação dos filtros que foram selecionados. (#020, #021).

Ao clicar sobre o registro de origem, sistema deverá exibir o rastreio, por exemplo se foi um lançamento com Nota Fiscal de Saída, Nota Fiscal de Entrada, Movimentação Bancária etc (#024).


Back-end:

Será necessária disponibilidade das API abaixo, as consultas serão realizadas conforme os parâmetros informados:

  • API para Lançamentos Contábeis (CT2) com as opções Get, Post, Put e Delete, receberá os parâmetros: Filial, Data, Número de Lote, Sub-Lote, Documento, Conciliados e Lançamento Padrão. Deve-se preencher o ComboBox com o status do lançamento: Conciliados, Não Conciliados

Na opção Get, deve-se retornar  dois objetos, um contendo os registros origens (SF1, SF2, SE1, SE2, SE5) dos lançamentos contábeis recuperados, quando tratar-se de lançamentos contábeis aglutinados, será necessário trazer cada origem relacionada e outro contendo as contabilizações destes registros juntamente com a conciliação quando já ocorreu (#010).

A apresentação dos registros de origem poderá ser Por Processos, onde serão retornadas as informações conforme os processos selecionados (Ativo Fixo, Compras, Financeiro Contas a Pagar, Financeiro Contas a Receber, Estoque) ou Por Extrato Bancário, neste caso, a conciliação ocorre de maneira sintética, por saldo bancário olhando o extrato bancário (#028).

Quando apresentação por Extrato Bancário e um Recebimento de Título no Financeiro ocorreu no período filtrado, este será apresentado no grid de origem e sistema deverá apresentar também o lançamento que originou esse recebimento, mesmo que em outro período, exemplo: Lançamento que ocorreu em Novembro e o Recebimento em Dezembro e data informada no Filtro de Dezembro, deve-se apresentar os títulos origem de Novembro (#005).

Ainda na apresentação por Extrato Bancário, deve-se retornar os valores Saldo Inicial e Saldo Atual, com base na tabela SE8 (E8_SALATUA e E8_DTSALAT), ver função fa380Rec no fonte FINA380.PRX (#013). 

A opção Post, deve realizar a inclusão de novas conciliações de acordo com os parâmetros informados, Put deverá realizar alterações nas Conciliações Contábeis já existentes e finalmente a opção Delete, realizará a exclusão das Conciliações Contábeis selecionadas.

Para melhor performance, necessário avaliar a possível criação de stored procedure para consultas e manipulações das informações na Conciliação Contábil e processo de retorno das informações deve ocorrer de forma assíncrona.


Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Request
linenumberstrue
collapsetrue
{
	"branchs": [],
	"dataMin": '10/01/2021',
	"dataMax": '21/01/2021',
	"AccountantAccounts": [],
	"conciliateBy": 1 */ 1 = processo, 2 = extrato bancário */,
	"process?": '000000000',
	"bankStatement?": {bank: '', account: '', agency: ''},
	"operation?": [],
	"filterEntity": true,
	"costCenters": [],
	"accountingItems": [],
	"clvl": []
}
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response: Get
linenumberstrue
collapsetrue
{
    "OriginEntries":[
		{
			"BranchId":"D MG 01",
			"OriginEntry":"D MG 0103-04-2020001000010000000001",
			"OriginValue":1000.00,
			"Accounted":true,
			"Reconcilied":true
		},
		{
			"BranchId":"D MG 01",
			"OriginEntry":"D MG 0103-04-2020001000010000000001",
			"OriginValue":1000.00,
			"Accounted":true,
			"Reconcilied":true
		},
		{
			"BranchId":"D RJ 02",
			"OriginEntry":"D RJ 0205-04-2020001000020000000010",
			"OriginValue":5000.00,
			"Accounted":true,
			"Reconcilied":false
		},
		{
			"BranchId":"D RJ 02",
			"OriginEntry":"D RJ 0206-04-2020001000020000000002",
			"OriginValue":20000.00,
			"Accounted":true,
			"Reconcilied":true
		}
	],
	"AccountingEntries": [
        {
            "BranchId":"D MG 01",
            "MovementDate":"03-04-2020",
			"BatchNumber":"08850",
			"SubLot":"001",
			"Document":"000001",
			"Item":"001",
			"ItemType":"1",
			"EntryValue":1000.00,
			"Reconcilied":true
        },
        {
           "BranchId":"D MG 01",
            "MovementDate":"03-04-2020",
			"BatchNumber":"08850",
			"SubLot":"001",
			"Document":"000001",
			"Item":"002",
			"ItemType":"2",
			"EntryValue":1000.00,
			"Reconcilied":true
        },
        {
           "BranchId":"D RJ 02",
            "MovementDate":"05-04-2020",
			"BatchNumber":"08850",
			"SubLot":"001",
			"Document":"000001",
			"Item":"001",
			"ItemType":"3",
			"EntryValue":5000.00,
			"Reconcilied":false
        },
        {
            "BranchId":"D RJ 01",
            "MovementDate":"06-04-2020",
			"BatchNumber":"08850",
			"SubLot":"001",
			"Document":"000005",
			"Item":"001",
			"ItemType":"1",
			"EntryValue":20000.00,
			"Reconcilied":true
        }
    ]
}
Bloco de código
languagecoldfusion
themeDJango
firstline1
titleJson Response: Post, Put e Delete
linenumberstrue
collapsetrue
{
	"AccountingEntries": [
		{
			"AccountingEntry": "D MG 0103-04-2020001000010000000001",
			"success": true
		},
		{
			"AccountingEntry": "D MG 0103-04-2020001000010000000002",
			"success": true
		},
		{
			"AccountingEntry": :"D RJ 0205-04-2020001000020000000003",
			"success": false
		},
		{
			"AccountingEntry": :"D RJ 0205-04-2020001000020000000010",
			"success": true
		}
	],
}


Também é necessário que o back-end retorne a propriedade _messages no objeto de retorno nas APIs de exclusão, edição e salvamento da conciliação de registros, como explicado detalhadamente nesta página do PO UI. Resumindo, essa propriedade serve para que o front-end exiba as mensagens de alerta conforme o status da requisição.


05. Campos e Parâmetros

Campo

Titulo

Descrição

XXX_FILIALFilialFilial do Sistema
XXX_CODIGOCodigo Codigo da Conciliacao
XX_TABORITabela OrigemTabela de Origem
XXX_CHVORIChave OrigemChave Registro Origem
XXX_CHVCTBChave ContabilChave Registro Contabil
XXX_USERUsuarioUsuario da Conciliacao
XXX_DATAData ConcData da Conciliacao
XXX_HORAHora ConcHora da Conciliacao

06. Tabelas Utilizadas

  • XXX - Conciliacao Contabil


Informações
titleImportante

Serão realizadas as gravações de data, hora e usuário responsável pela conciliação (#026).

Totvs custom tabs box items
defaultno
referenciagrid_imagem

Totvs custom tabs box items
defaultno
referenciagrid_modal

Totvs custom tabs box items
defaultno
referenciagrid_alert

...