Por que eu devo ler este artigo:Um Sistema Financeiro é um módulo que praticamente todo o desenvolvedor de sistemas um dia terá pela frente, por isso neste artigo veremos como funciona um sistema básico com Contas a Pagar e Contas a Receber. No desenvolvimento do artigo será feito o uso do framework ASP.NET MVC, além do padrão de projeto DAO para o acesso a dados e uso do banco de dados SQL Server 2014, além de Razor na camada de apresentação.

O sistema financeiro de uma empresa consiste em um dos mais importantes setores, pois é vital para a sua sobrevivência. A gestão financeira é uma das mais tradicionais e se encontra em qualquer empresa, seja ela de grande, médio ou pequeno porte, onde são feitas análises e decisões permanentemente, visando sempre maximizar os resultados econômicos.

Um sistema financeiro de uma empresa consiste basicamente em dois módulos básicos:

  • Contas a Pagar;
  • Contas a Receber.

Contas a Pagar

O modulo de Contas a Pagar consiste nas obrigações assumidas pela empresa e que devem ser cumpridas dentro do prazo estipulado no ato da compra. Muitas destas obrigações assumidas na hora da compra são feitas a prazo, devendo o sistema de contas a pagar prover esta opção de registro.

É muito importante para a empresa cumprir com todas as obrigações dentro do prazo para não ser prejudicada em futuras comprar e evitar ter o seu nome negativado junto aos órgãos de controle de créditos.

Para organizar todas estas obrigações, de modo que não aja nenhum esquecimento e evitando transtornos, existem os controles de contas a pagar que nos devem manter informados de todas as contas, valores totais, vencimentos e totais das dívidas.

Havendo um sistema organizado e com informações claras e objetivas, o administrador da empresa consegue fazer uma previsão de caixa para quitação dos débitos e prever possíveis dificuldades financeiras, podendo assim fazer negociações com credores com antecedência evitando transtornos.

Contas a Receber

A maioria das empresas realizam vendas a prazo, atraindo mais os clientes para adquirem suas mercadorias e assim conseguindo maiores lucros.

Mas para que as vendas a prazo possam ser efetuadas com segurança, algumas medidas devem ser tomadas pelas empresas na concessão de créditos aos clientes, para que não exista um número muito grande de inadimplências, criando dificuldades financeiras para a empresa.

Ao conceder vendas a prazo para seus clientes, a empresa deve elaborar um controle dessas vendas, de modo que ela possa ter informações sobre valores a receber e clientes inadimplentes.

O registro de contas a receber deve ser feito individualmente e diariamente, de modo que os empresários tenham um controle sobre o cadastro dos clientes, saldo pendente de cada cliente e o resultado global dos valores a receber em determinados intervalos de tempo.

Modelando uma Conta

Em nosso modelo proposto, teremos uma classe base que irá representar toda e qualquer conta, seja ela a pagar ou receber, conforme Listagem 1.

Por essa razão criamos uma classe chamada Conta, que irá possuir um identificador único, um número do documento que servirá na hora da quitação da conta, a data de vencimento, o valor total da conta e a situação.

Para a situação, criamos uma enumeração (linha 5) que irá representar as duas situações possíveis para a dívida, se ela está em aberto ou foi paga.

Listagem 1. Classe Conta a Pagar


        using System;

        namespace SistemaFinanceiro.Models
        {
        public enum Situacao { Aberto = 'A', Pago = 'P' }

        public abstract class Conta
        {
        public int Id { get; set; }
        public int Documento { get; set; }
        public DateTime DataVencimento { get; set; }
        public double ValorTotal { get; set; }
        public Situacao Situacao { get; set; }
        }
        }
        

Por se tratar de uma classe base que não fará sentido ser instanciada em nossa aplicação, a tornamos abstrata, pois somente servirá como base para as suas duas classes descendentes.

Classe ContaPagar

Após a modelagem da conta, vamos criar uma classe que estende a classe Conta, de modo que esta classe herde todos os atributos, métodos e propriedades da classe Conta, conforme podemos ver na Listagem 2.

Listagem 2. Classe ContaPagar


        namespace SistemaFinanceiro.Models
        {
        public class ContaPagar : Conta
        {
        public string Fornecedor { get; set; }
        }
        }
        

Como podemos observar (linha 5), a única informação complementar da classe ContaPagar em relação à classe Conta é a adição de uma nova propriedade chamada Fornecedor, onde registramos para qual empresa estamos devendo determinado valor.

Classe ContaReceber

Da mesma forma que a classe ContaPagar, vamos criar uma classe que estende a classe Conta, de modo que esta classe herde todos os atributos, métodos e propriedades da classe Conta, conforme podemos ver na Listagem 3. Porém desta vez irá se chamar ContaReceber.

Listagem 3. Classe ContaReceber


        namespace SistemaFinanceiro.Models
        {
        public class ContaReceber : Conta
        {
        public string Cliente { get; set; }
        }
        }
        

Como podemos observar (linha 5, a única informação complementar da classe ContaReceber em relação a classe Conta é a adição de uma nova propriedade chamada Cliente, onde registramos qual cliente está nos devendo determinada importância.

Banco de Dados SQL Server

Para realizarmos o armazenamento persistente dos dados, faremos uso do banco de dados Microsoft SQL Server 2014, porém versões anteriores como SQL Server 2012 e 2008 também podem ser utilizadas sem qualquer modificação na estrutura da base de dados. O script para criação da base encontra-se na Listagem 4.

Listagem 4. Script de criação da base de dados no Microsoft SQL Server 2014


        CREATE DATABASE [dbfinanceiro]

        CREATE TABLE [dbo].[ContasPagar](
        [IdContaPagar] [int] IDENTITY(1,1) NOT NULL,
        [NumeroDocumento] [varchar](50) NOT NULL,
        [DataVencimento] [date] NOT NULL,
        [ValorTotal] [float] NOT NULL,
        [Situacao] [char](1) NOT NULL,
        [NomeFornecedor] [varchar](50) NOT NULL,
        CONSTRAINT [PK_ContasPagar] PRIMARY KEY C ... 

Quer ler esse conteúdo completo? Tenha acesso completo