Skip to content

TreinaDev/pague-aluguel

Repository files navigation

PagueAluguel - Sistema de Cobrança de Aluguéis e Taxas de Condomínio

Static Badge Static Badge Bootstrap

Static Badge Static Badge

Tópicos

▶️ Descrição do projeto

▶️ Funcionalidades

▶️ Gems utilizadas

▶️ Layout da aplicação

▶️ Pré-requisitos

▶️ Como executar a aplicação

▶️ Integração com o CondoMinions

▶️ Como executar os testes

▶️ Navegação

▶️ APIs

▶️ Criação de Contas Fictícias

▶️ Desenvolvedores

Descrição do Projeto

📍 PagueAluguel é uma aplicação para o envio de cobranças de aluguel, taxas de condomínio e outras cobranças relacionadas aos imóveis de um condomínio. O sistema é utilizado por usuários proprietários de apartamentos do condomínio e usuários com perfil administrativo. A aplicação está integrada com a aplicação CondoMinions para fazer a validação de dados de unidades e para garantir que os moradores recebam as cobranças mensais de suas unidades.

Funcionalidades

Registro de Usuários

  • Cadastro de Administradores: Super Admins podem cadastrar novos administradores com nome completo, CPF, e-mail, foto e senha, mas com acessos limitados conforme definidos pelo Super Admin.
  • Cadastro de Proprietários: Proprietários podem se registrar na plataforma com validação do CPF pela aplicação CondoMinions.
  • Gestão de Múltiplos Imóveis: Um usuário pode ser registrado como proprietário de múltiplos imóveis, com integração da App CondoMinions.

Gestão de Taxas Condominiais

  • Cadastro de Taxas: Administradores podem cadastrar taxas condominiais fixas, com nome, valor, recorrência (quinzenal, mensal, bimestral, semestral, anual) e dia de lançamento.
  • Juros e Multa: Opção para adicionar juros e multa por atraso nas taxas.

Rateio de Contas Compartilhadas

  • Lançamento de Contas: Administradores podem lançar contas de serviços compartilhados (água, energia, etc.), com descrição, data e valor total.
  • Distribuição Automática: O valor é distribuído automaticamente entre unidades conforme fração ideal cadastrada em CondoMinions.

Taxas de Uso de Áreas Comuns

  • Cadastro de Taxas de Uso: Administradores podem cadastrar taxas de utilização padrão para áreas comuns.
  • Modificação e Histórico: Taxas de uso podem ser modificadas, mantendo o histórico de valores.

Registro e Gerenciamento de Cobranças Avulsas

  • Registro de Cobranças Avulsas: Administradores e proprietários podem registrar cobranças avulsas com unidade, valor, data de lançamento e descrição.
  • Integração com CondoMinions: Reservas de áreas comuns na aplicação CondoMinions geram automaticamente cobranças avulsas.

Cobrança de Aluguel

  • Configuração de Aluguel: Proprietários podem configurar a cobrança de aluguel, com valor, dia de lançamento, juros e multa por atraso.
  • Desativação de Cobrança: Proprietários podem desativar a cobrança de aluguel automaticamente se o imóvel deixar de ser alugado.

Emissão de Faturas de Condomínio

  • Geração de Faturass: Todo dia 01 de cada mês, são geradas faturas contendo todas as cobranças da unidade.
  • Detalhamento de Faturas: Faturas contêm itens cobrados e registram pagador e recebedor com dados do CondoMinions.

Acesso a Faturas

  • Visualização de Faturas: Inquilinos podem visualizar faturas de pagamento sem necessidade de login, informando apenas o CPF.
  • Validação de CPF: A aplicação valida o CPF com o CondoMinions para acesso as faturas.
  • API Endpoint: Dois APIs endpoints são disponibilizados para consulta de faturas, um de listagem e um de detalhamento. Mais detalhes na seção de API.

Registro de Pagamento

  • Gestão de Pagamentos: Administradores podem visualizar, filtrar e confirmar pagamentos de faturas, registrando se a fatura foi paga ou não.

Emissão de Certidão Negativa de Débitos

  • Emissão de Certidão: Administradores, proprietários e moradores (sem autenticação) podem emitir certidões negativas de débito se não houver faturas vencidas e não pagas.
  • Validação e Geração: Certidão é gerada no momento da solicitação com data e hora da emissão.

Gems utilizadas

  • Rspec: Framework de testes para Ruby on Rails.
  • Capybara: Ferramenta de testes para simular navegação do usuário.
  • Shoulda Matchers: Matchers para facilitar a escrita de testes em Rails.
  • Factory Bot Rails: Biblioteca para criar dados de teste.
  • Simplecov: Ferramenta de cobertura de código para Ruby.
  • Devise: Gem para autenticação de usuários.
  • CPF/CNPJ: Biblioteca para validação e formatação de CPF e CNPJ.
  • Faraday: Biblioteca para requisições HTTP.
  • Money Rails: Extensão para gerenciamento de valores monetários em Rails.
  • Stimulus-Rails: Integração do Stimulus com Rails.
  • Whenever: Gem para agendamento de tarefas cron.

Layout da Aplicação 🖼️

Inserir aqui capturas de tela da aplicação ou gifs

Pré-requisitos

🚨 Ruby v3.2.2

🚨 Rails v7.1.3.1

🚨 Node >= 18

🚨 Yarn v1.22.22

Como executar a aplicação

  • Clone este repositório
git clone https://github.com/TreinaDev/pague-aluguel.git
  • Abra o diretório pelo terminal
cd pague-aluguel
  • Instale o Bundle pelo terminal
bundle install
  • Crie e popule o banco de dados
rails db:migrate
rails db:seed
  • Instalar as dependências do Yarn
yarn install
  • Execute a aplicação
bin/dev -p 4000

Integração com o CondoMinions

Para ver a aplicação funcionando por completo com as APIs integradas, você também precisará clonar e executar o projeto CondoMinions. Siga os passos abaixo para configurar e executar o CondoMinions:

  • Clone o repositório CondoMinions
git clone https://github.com/TreinaDev/condominions.git
  • Abra o diretório CondoMinions pelo terminal
cd condominions
  • Instale o Bundle pelo terminal
bundle install
  • Crie e popule o banco de dados
rails db:migrate
rails db:seed
  • Instalar as dependências do Yarn
yarn install
  • Execute a aplicação CondoMinions
bin/dev

Visualização Completa: Com ambas as aplicações rodando, você poderá ver o PagueAluguel funcionando plenamente, incluindo todas as funcionalidades dependentes da integração com o CondoMinions.

Como executar os testes

  • Execute os testes:
rake spec

Este comando irá rodar todos os testes definidos nos seus arquivos de teste RSpec.

  • Verifique a cobertura de testes:

Após a execução dos testes, você pode verificar a cobertura de testes do projeto. O relatório detalhado pode ser visualizado executando:

open coverage/index.html

Este comando abrirá o relatório de cobertura no seu navegador padrão, permitindo visualizar quais linhas de código foram cobertas pelos testes.

Navegação

🧭 Para acessar páginas que requerem autenticação, utilize as contas abaixo:

Usuário E-mail Senha
Super Administrador [email protected] password123
Administrador [email protected] 123456
Proprietário de Imóvel [email protected] lais123

Criação de Contas Fictícias

Testando a Plataforma:

Para testar a plataforma PagueAluguel como administrador ou proprietário de imóvel, é necessário criar contas com CPFs ou CNPJs válidos. Recomendamos a utilização de serviços de geração de números de CPF e CNPJ válidos para garantir que a experiência de teste reflita com precisão o comportamento esperado em um cenário de uso real.

Recomendação de Ferramentas para Geração de CPF/CNPJ:

Gerador de CPF/CNPJ:

Você pode usar sites como 4Devs para gerar números válidos que podem ser usados para cadastro na plataforma.

APIs

1. Taxas de Áreas Comuns

1.1 Lista de últimas taxas de área comum cadastradas

📍 GET /api/v1/condos/:id/common_area_fees

Recebe como parâmetro :id de um condomínio, e retorna uma lista com a última taxa cadastrada para cada área comum desse condomínio

Retorna:
Caso o condomínio não possua nenhuma taxa cadastrada:
status: 200, json: []

Caso o condomínio possua alguma taxa cadastrada:
status: 200, json:

[
  {
    "id":1,
    "value_cents":20000,
    "created_at":"2024-07-11T21:09:13.019Z",
    "common_area_id":1,
    "condo_id":1,
  },
  {
    "id":2,
    "value_cents":30000,
    "created_at":"2024-07-11T21:09:13.024Z",
    "common_area_id":2,
    "condo_id":1
  },
  {
    "id":3,
    "value_cents":40000,
    "created_at":"2024-07-11T21:09:13.027Z",
    "common_area_id":3,
    "condo_id":1
  }
]

1.2 Detalhes de uma taxa de área comum

📍 GET /api/v1/common_area_fees/:id

Recebe como parâmetro o :id de uma taxa cadastrada e retorna os detalhes da taxa de área comum desejada.

Retorna:
Caso não exista taxa com o id informado:
status: 404, json:

{
  "errors":"Não encontrado"
}

Caso o condomínio possua alguma taxa cadastrada:
status: 200, json:

{
  "value_cents":20000,
  "created_at":"2024-07-11T21:09:13.019Z",
  "common_area_id":1,
  "condo_id":1
}

2. Cobranças Avulsas

2.1 Criação de Cobranças Avulsas

📍 POST /api/v1/single_charges/?params

Expõe uma API endpoint de criação de model single_charge, válido para criação de Multas e Reservas de Áreas Comuns.

Resposta para falha na criação: status: 422 (:unprocessable_entity)

  • São obrigatórios: unit_id, condo_id, value_cents, issue_date, charge_type
  • issue_date não pode estar no passado
  • se o charge_type == common_area_fee, a common_area_id é obrigatória
  • se o charge_type == fine, a description é obrigatória
  • a unit_id deve pertencer ao condo_id (unidade deve ser do condomínio)

Recebe os seguintes parâmetros::

{ single_charge: { description: string,
                   value_cents: integer,
                   charge_type: enum (:fine ou :common_area_fee),
                   issue_date: date,
                   condo_id: integer,
                   common_area_id: integer,
                   unit_id: integer
                 }
}

Resposta para criação com sucesso:
status: 201, body: {message: :message} (:created)

Exemplo de cobrança avulsa (Multa):

{ single_charge: { description: 'Multa por barulho durante a madrugada',
                   value_cents: 10000,
                   charge_type: :fine,
                   issue_date: 5.days.from_now.to_date,
                   condo_id: 1,
                   common_area_id: nil,
                   unit_id: 1
                  }
}

Resposta para criação com sucesso:
status: 201, body: {message: :message} (:created)

Exemplo de cobrança avulsa (Reserva de Área Comum):

{ single_charge: { description: nil,
                   value_cents: ~deve retornar do endpoint de taxas de áreas comuns~,
                   charge_type: :common_area_fee,
                   issue_date: 5.days.from_now.to_date,
                   condo_id: 1,
                   common_area_id: 2,
                   unit_id: 1
                 }
}

Resposta para criação com sucesso:
status: 201, body: {message: :message, single_charge_id: :id} (:created)

2.2 Cancelar uma reserva de área comum

Expõe uma API endpoint de cancelamento do status do model single_charge para Reservas de Áreas Comuns.

📍 PATCH /api/v1/single_charges/:id/cancel

Recebe como parâmetro o :id de uma reserva Resposta para cancelamento com sucesso:
status: 201, body: {message: :message} (:created)

3. Faturas

3.1 Detalhes de uma fatura

📍 GET api/v1/bills/:id

Recebemos como parâmetro um :id de uma fatura e retornamos todos os detalhes da fatura desejada.

Retorna:
Caso não exista taxa com o id informado:
status: 404, json:

{
  "errors":"Não encontrado"
}

Caso exista taxa com o id informado:
status: 200, json:

{
  "unit_id": 1,
  "condo_id": 2,
  "issue_date": "2024-07-01",
  "due_date": "2024-07-29",
  "total_value_cents": 105500,
  "status": "pending",
  "denied": false,
  "values": {
    "base_fee_value_cents": 21100,
    "shared_fee_value_cents": 40000,
    "single_charge_value_cents": 44400,
    "rent_fee_cents": 120000
  },
  "bill_details": [
    {
      "value_cents": 30000,
      "description": "Conta de Água",
      "fee_type": "shared_fee"
    },
    {
      "value_cents": 10000,
      "description": "Conta de Luz",
      "fee_type": "shared_fee"
    },
    {
      "value_cents": 10000,
      "description": "Taxa de Condomínio",
      "fee_type": "base_fee"
    },
    {
      "value_cents": 11100,
      "description": "Taxa de Manutenção",
      "fee_type": "base_fee"
    },
    {
      "value_cents": 11100,
      "description": "Multa por barulho",
      "fee_type": "fine"
    },
    {
      "value_cents": 33300,
      "description": "Acordo entre proprietário e morador",
      "fee_type": "other"
    }
  ]
}

3.2 Lista de faturas por unidade

📍 GET api/v1/units/:unit_id/bills

Recebemos como parâmetro um id de uma unidade e retornamos todas as faturas relacionadas a ela.

Retorna:

Caso a unidade possua alguma fatura cadastrada: status: 200, json:

{
  "bills": [
    {
      "id": 1,
      "issue_date": "2024-07-01",
      "due_date": "2024-07-10",
      "total_value_cents": 1000
    },
    {
      "id": 3,
      "issue_date": "2024-05-01",
      "due_date": "2024-05-10",
      "total_value_cents": 3000
    }
  ]
}

Caso a unidade não possua nenhuma fatura cadastrada: status: 200:

{
  "bills": [

  ]
}

4. Comprovante de Pagamento

📍 POST /api/v1/receipts

Expõe um endpoint da API para a criação do modelo receipt, válido para o upload de comprovantes.

Parâmetros do Corpo da Requisição

  • receipt: Arquivo anexado do comprovante. Obrigatório. ( Deve ser um arquivo em formato PDF, JPEG ou PNG )
  • bill_id: Id da fatura associada ao comprovante. Obrigatório.


Desenvolvedores 🧑🏽‍💻🧑🏻‍💻🧑‍💻

Realizado por

Campus Code - Treinadev - T12

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages