CashFlow
Módulo responsável por gerenciar o sistema fluxo financeiro do caixa da empresa.
Requisitos
Lançamentos Financeiros
- Os lançamentos financeiros são usados para registrar as movimentações financeiras das empresa. Qualquer saída ou entrada de dinheiro deve ter um lançamento correspondente.
- Um lançamento financeiro pode representar tanto uma conta já paga/recebida quanto um lançamento futuro de recebimento/pagamento.
Os lançamentos devem possuir as seguintes referências:
- Empresa: Indicando à qual empresa esse lançamento pertence. [Obrigatório]
- Categoria: Categoria de pagamentos, para sumarização dos pagamentos.
- Beneficiário/Pagador: Associa uma Pessoa como Beneficiário/Pagador ao lançamento. Não deve ser obrigatório, mas permitir a associação para facilitar a busca dos pagamentos/recebimentos por cliente, fornecedor, funcionário, etc. (PersonVO)
- Documento(s) de Origem: Permite a associação de documentos que geraram o lançamento, como NFe, Guias de Impostos, Contas de Consumo, etc. Pode ser uma maneira de arquivar a guia (como arquivo binário, ou como referência para o cadastro da NFe no sistema). Algumas vezes um mesmo lançamento de pagamento (por exemplo mesmo boleto, ou mesma transferência) pode abrange a união de vários Documentos de Origem, por isso um lançamento deve permitir a associação de múltiplos documentos.
- Operação do Lançamento: Define a operação desse lançamento: [Enum]
- DEBIT: Uma saída, valor removido do caixa: conta a pagar como um boleto de fornecedor, pagamento de salário, etc.
- CREDIT: Uma entrada, valor removido do caixa: conta a receber como um boleto emitido para um convênio, recebíveis de cartões de crédito e débito, etc..
- FUNDTRANSFER: Transferência de fundos entre uma conta e outra.
- Tipo do Lançamento: Permite definir alguns tipos diferentes de lançamentos: [Enum]
- UNIQUE Define um pagamento único. Como o pagamento de uma nota avista, um serviço de conserto prestado, etc.
- INSTALLMENTS Define que é um pagamento parcelado. Como uma nota com o valor dividido em 3 vezes em 3 boletos, ou um pagamento de maquinário em várias parcelas.
- MONTHLYREPETITION Define que o pagamento se repete com frequência mensal. Como a mensalidade de alguma empresa, uma taxa de serviço de manutenção como dedetização, impostos mensais, contas de consumos. No caso de repetição mensal temos que completar os campos:
- Dia Esperado: Define o dia do mês em que a conta costuma ocorrer.
- ANNUALREPETITION Define que o pagamento se repete com frequência anual. Como guias referentes ao 13°, registros de domínio, certificados, impostos municipais como TFA, etc.. No caso de repetição anual temos que completar os campos:
- Dia Esperado: Define o dia do mês em que a conta costuma ocorrer.
- Mês Esperado: Define o mês em que a conta costuma ocorrer.
Fragmento do Lançamento
O objeto "Fragmento do lançamento" indica as informações sobre o pagamento. Como um mesmo lançamento pode conter pagamentos parcelados e serem pagos de formas diferentes as informações sobre pagamentos ficam um objeto separado. Para lançamentos sem parcelamento (pagamento único) deve conter apenas 1 Fragmento associado.
- Origin Account: Quando o lançamento for um pagamento ou transferência de fundos, é obrigatório associar à uma conta para indicar de onde foi tirado o valor para pagamento/transferência.
- Recipient Account: Quando o lançamento for um recebimento ou transferência de fundos, é obrigatório associar à uma conta para indicar para onde foi o valor recebido.
- Parcelas/Repetições: Associa o pagamento aos "Fragmentos" do pagamento. Normalmente cada lançamento tem apenas 1 com os dados do pagamento. Mas em casos de parcelamento do lançamento ou de contas que se repetem (como contas de consumo e impostos) é associado a diversos objetos. Cada fragmento é um pagamento diferente, com guia, código de barras, valores, vencimentos, etc. distintos.
- Estatus do Lançamento: Define o "passo" ou estado em que o lançamento se encontra:
- PLANNED: O pagamento está planejado (lançado no sistema) e aguardando para pagamento.
- SENT: Estado usado para contas que são pagas por malote eletrônico, ou cobranças por geração de boleto, e indicam que já foram incluídas em um lote para enviar para o banco. Neste estado a conta já deve estar associada à uma conta bancária.
- ERROR: Estado usado para contas que foram enviadas ao banco por malote eletrônico e retornaram com algum tipo de erro da instituição bancária.
- PAID: Estado indicando que o lançamento já foi realizado. Isto é, o pagamento efetuado ou o recebível em caixa. Neste estado a associação da conta é obrigatória.
- Estatus do Lançamento: Define o "passo" ou estado em que o lançamento se encontra:
- Espécie de Lançamento: Define o tipo de conta a pagar ou receber (não usado para FUNDTRANSFER)
- PAYROLL: Pagamento de folha de pagamento. (Somente Débito)
- PUBLICSERVICES: Boletos de concessionárias de serviços como telefonia, luz, gás, etc.
- PAYMENTSLIP_DARF Guia de pagamento de DARF
- PAYMENTSLIP_GPS Guia de pagamento de GPS
- BOLETOS: Boletos de pagamentos em geral
- DEPOSIT: Lançamento de depósitos
- OTHER: Lançamentos manuais para outros pagamentos e recebimentos. Por exemplo, pagamentos sem nota de pequenos consertos, vales, etc.
- Mensagem do Malote Eletrônico: Mensagem(ns) recebida do sistema bancário ao tentar pagar uma conta, enviar um pagamento de salário, gerar um boleto, etc.. Por malote eletrônico.
- Data de Lançamento: Registra a data em que o registro foi criado. Obrigatório
- Data de Vencimento: Data máxima para pagamento sem penalidades de multas, juros e protestos. Obrigatório
- Data de Execução: Data em que a ação de pagamento/recebimento realmente ocorreu.
- Data de Compensação: Data em que o valor realmente entrou no caixa. Normalmente a data é uma duplicação do valor de 'data de execução', no entanto para recebíveis de cartões, boletos, e cheques depositados essa data pode ser diferente da data de execução devido ao processo de compensação. Este campo nunca deve ser nulo. Em casos de compensação imediata, duplicar o valor de 'data de execução' para simplificar consultas do banco de dados.
- Valor Original: Valor do lançamento. (Seguindo sempre a convenção de que todo pagamento é salvo como valor negativo no banco, e todo recebimento é salvo como valor positivo. - Nos casos de lançamentos de movimentação, sempre lançar o valor positivo)
- Valor Efetivo: O valor pago é o valor que realmente entrou ou saiu da Conta. Esse valor pode ser diferente do original devido a multas, descontos, taxas de recebíveis, etc.
- Observações: Campo que permita que o usuário escreva qualquer detalhamento mais específico sobre o fragmento.
- Documento de Origem: É possível anexar o documento de origem da dívida, seja uma NFe já existente no sistema, seja a digitalização de uma guia de impostos.
- Comprovante de Pagamento: Permite anexar o documento com o comprovante de pagamento.
Os lançamentos devem ter os seguintes atributos:
- Documento(s) de Origem: Permite a associação de documentos que geraram o lançamento, como NFe, Guias de Impostos, Contas de Consumo, etc. Pode ser uma maneira de arquivar a guia (como arquivo, ou como referência para o cadastro da NFe no sistema). Algumas vezes um mesmo lançamento de pagamento (por exemplo mesmo boleto) pode abrange a união de várias NFes.
- Nome de Exibição: Descrição 'curta' dado pelo usuário para descrever o lançamento. Este nome que será usado para exibir em telas e relatórios (como extratos das contas) que permita que o usuário identifique o pagamento.
- Observações: Campo que permita que o usuário escreva qualquer detalhamento mais específico sobre o lançamento.
- Projeção Financeira: Caso o tipo de lançamento seja XXXXREPETITION, define como a conta será projetada nos meses seguintes:
- NONE O lançamento não é projetado até seja realmente lançado.
- LASTMONTH Usa o mesmo valor do último mês. Bom para lançamentos fixos que são reajustados anualmente.
- LAST3MONTHS Usa a média do valor dos últimos três meses realizados.
- LAST6MONTHS Usa a média do valor dos últimos seis meses realizados.
Tipo do Lançamento
De acordo com o tipo de lançamento o sistema deve se comportar das seguintes maneiras:
- UNIQUE: No caso de pagamento único, o sistema permite que sejam anexadas guias ao lançamento, e não ao fragmento único que representa o pagamento. No entanto, deverá permitir a anexação de recibo ao fragmento.
- INSTALLMENTS: No caso de parcelamento, o sistema permite que sejam anexadas guias ao lançamento, e não à nenhum dos fragmentos. Também deve permitir a anexação de comprovantes em cada fragmento.
- MONTHLYREPETITION e ANNUALREPETITION: O sistema não deve permitir anexar guias ao lançamento. Guias/Documentos de origem, assim como os comprovantes, devem ser associados aos fragmentos.
Contas
Contas são usadas para lançar as entradas e saídas financeiras da empresa. Facilitando o controle dos saldos e valores financeiros da empresa.
Cada conta cadastrada deve ter os seguintes atributos:
- Nome: Para o usuário nomear e identificar a conta.
- Tipo da Conta:
- Conta Local: Usada para lançamento manuais de caixas locais.
- Conta Bancária: Usada para controle de contas bancárias como corrente ou conta investimento. Esse tipo de conta permitirá a conciliação de extrato bancário, bem como a exportação de “malote eletrônico” (CNAB?) para envio de pagamentos para o banco. Para contas bancárias temos os seguintes atributos adicionais:
- Banco: Número do banco (listagem já pré existente do sistema, por causa do suporte ao “malote eletrônico”).
- Agência: Agência da conta.
- Número da Conta: Número da conta corrente.
- Contato Agência: Permite anexar um contato (PersonVO) da agência.
- Contato do Gerente: Permite anexar um contato (PersonVO) do gerente da conta.
- Cartão BNDES: Usada para controlar compras e fluxo do cartão BNDES. (Para Implementação Futura)
- Cartão de Crédito: Usada para controlar e registrar fluxos de pagamento em cartão de crédito. (Para Implementação Futura)
- Administradoras de Cartão: Conta com a função de gerenciar os lançamentos de vendas com cartão de crédito. Para calcular taxas e saber o saldo de recebíveis, taxas e etc.. Ao receber no banco, marcamos como "Transferência de Fundos" entre as contas de administradoras e do extrato bancário.
- Conta Aplicação: Conta usada para gerenciar os fundos de aplicações da empresa.
Categorias de Lançamentos
- As categorias de lançamentos são usadas para totalizar os lançamentos por grupos de interesse, de forma a mostrar relatórios de fluxo de caixa.
- As categorias devem ter uma estrutura hierárquica, de forma que o usuário possa criar sua árvore da maneira como achar conveniente ter os totais e subtotais.
- As categorias devem ter os seguintes campos:
- Nome: Nome da categoria dada pelo usuário.
- Categoria Pai: A categoria pai define onde essa categoria será utilizada.
- Permite Lançamento: Define se essa categoria permite que sejam colocados lançamentos nela ou se não. Categorias que não permitem o lançamento direto nela podem ser usadas como categorias pais apenas para a sumarização das categorias abaixo dela.
- Em caso de alteração, que proíba novos lançamentos na categoria, os lançamentos antigos continuarão lançados sem problema.
- Categorias com lançamentos e lançamentos filhos devem ter os totais das filhas e dela própria sumarizados. Mesmo que sejam exibidos separados de alguma forma.
Conciliação Bancária
A conciliação bancária tem a finalidade de sincronizar as informações oferecidas pelo banco (extrato bancário), com as informações (lançamentos) disponíveis no sistema e associadas a contas do tipo "Conta Corrente". Para isso o sistema deve executar as seguintes tarefas:
- Importar Extrato Bancário: O sistema deve permitir a importação de formatos comuns usados pelos bancos. Deve guardar os dados importados ignorando os trechos repetidos, e organizar de “forma continua” as informações do extrato bancário. Deve ainda ser capaz de “informar” se perceber que períodos de datas não foram importados, por exemplo o usuário esqueceu pulou algum trecho.
- Mapear Lançamentos: O sistema deve oferecer uma ferramenta que permita mapear os lançamentos de extrato com os lançamentos do sistema. A intenção é verificar todos os lançamentos ocorridos no extrato com os lançamentos locais utilizados no fechamento da empresa. O mapeamento entre lançamentos do extrato e do sistema deve ser do tipo 1:N, ou N:1 pois podemos ter:
- múltiplos pagamentos no sistema e um único lançamento no extrato, como boletos pagos em malote eletrônico; e,
- ter um único lançamento no sistema para múltiplos no extrato, como por exemplo os créditos de cartões de crédito de um periodo que não são controlados no sistema, e o usuário simples soma todos para realizar um único lançamento de crédito mensal.
- Em cada mapeamento múltiplo vamos chamar o lado "1" do relacionamento com o owner do relacionamento para facilitar buscas e validações evitando que mapeamentos N:N sejam feitos. A ideia não é exibir esse campo para o usuário, mas que as UIs possam gerencia-lo sozinho permitindo apenas que o usuário ao fazer o mapeamento escolha como seus lançamentos serão associados.
- Status do Mapeamento:
- NONE: Significa que nenhum mapeamento foi feito ainda entre aquele lançamento e o extrato bancário.
- INCOMPLETE: Significa que algum mapeamento já foi feito entre os lançamentos e o extrato, mas os valores não estão batendo.
- VALIDATING: Mostra que o sistema fez os mapeamentos estão completos e praticamente OK, mas ainda precisa de alguém com acesso os valide. A ideia é que depois de validados (auditados) alguém sem permissão de auditoria não possa mais edita-lo ou excluí-los. Mapeamentos automáticos feitos pelo sistema, quando ficarem completos devem ser definidos como VALIDATING, enquanto que se o mapeamento automático ficar incompleto ele deve ser definido como INCOMPLETE.
- AUDITED: Define que o mapeamento foi auditado e está pronto e validado em definitivo.
Contas a Pagar
O sistema deve ter uma tela para gerenciar as contas a pagar (ainda não pagas) para que seja executado o pagamento delas. Além da listagem de contas a pagar por período essa tela deve permitir que pagamentos sejam executados. Durante a execução de um pagamento o sistema deve perguntar em qual conta local o pagamento será executado.
- Pagamentos com "Conta Corrente"
- Malote Eletrônico: Caso uma conta bancária seja escolhida devemos mostrar a opção de "Malote Eletrônico", quer permitirá a geração de malote eletrônico com todos os pagamentos suportados para aquela instituição financeira. Os pagamentos não aceitos devem ser exibidos em tela de confirmação. O arquivo do malote eletrônico não precisa ser salvo explicitamente, mas deve ser possível gera-lo novamente a partir dos dados que devem ser salvos nos fragmentos dos lançamentos.
- Cheque: Ao escolher pagar com uma conta bancária também deve ser possível escolher a opção de pagamento com folha de cheque. Ao escolher essa opção o usuário será indagado do número do cheque para registro, além de data pré-datamento, e data de emissão (o sistema pode sugerir a data de hoje, mas o lançamento do sistema pode não estar sendo feito no momento em que o cheque foi preenchido.)
Contas a Receber
- Gestão dos recebíveis da operadora de cartão
- Recebimento de Boletos Emitidos