Visão geral da parcela

Installment é a entidade que representa a parcela em si e cuja responsabilidade é controlar o saldo em aberto de uma conta específica, responder a situação de pagamento e vencimento de uma parcela e saldos específicos para quitação da mesma.

🚧

Premissas

  • Pertence a um InstallmentPlan
  • Conhece uma Account
  • Nasce após a confirmação do desembolso do empréstimo (no caso onde a dívida é oriunda do empréstimo)

🏛 Estrutura da entidade

{
    "id": "xpto",
    "installment_plan_id": "ja1239sakfapsodasd9",
    "account_id": "ja1239sakfapsodasd9",
    "number": 1,
    "start_date": "2022-04-01",
    "due_date": "2022-04-30",
    "settlement_date": "2022-05-01",
    "collection_activation_date": "2022-05-01",
    "initial_amount": 2000.00,
    "total_future_balance": 1500.00,
    "total_present_balance": 1500.00,
    "overdue_balance": 1500.00,
    "is_overdue": true,
    "is_collection_enabled": true,
    "is_settled": false,
    "is_accrual_enabled": true,
    "total_paid": 0.0000,
    "total_interest_economy": 0.0000,
    "creation_date": "2022-05-01",
    "last_update_date": "2022-05-01",
}

📚 Dicionário de dados

CamposTipoDescrição
id stringIdentificador único da parcela
installment_plan_idstringIdentificador do plano de parcelamento a que se refere aquela parcela
account_idstringIdentificador da conta (no AccountingService) relacionada a parcela
numberinteiroNúmero ordinal que identifica qual é a parcela
start_datedateData da início da apuração da parcela. dia calendário da data máxima de desembolso no mês M+{{InstallmentNumber}} em relação ao mês da data máxima de desembolso
due_datedateData de vencimento original da parcela. D-1 do dia calendário da data máxima de desembolso no mês M+{{InstallmentNumber}}+1 em relação ao mês da data máxima de desembolso ou o próximo dia útil
antecipated_maturity_datedateData de vencimento antecipado da parcela. Será nula caso o plano de parcelamento não tenha vencimento antecipado
settlement_datedateData em que a parcela foi quitada
collection_activation_datedateData de ativação da coleta para a parcela. (Pode ser ativada antes da start_date)
initial_amountdecimalValor inicial total da parcela
total_future_balancedecimalSaldo "absoluto" da parcela (soma dos lançamentos)
total_present_balancedecimalValor presente do saldo da parcela (valor devido)
overdue_balancedecimalValor da parcela no dia do vencimento
is_overduebooleanFlag que informa se a parcela está vencida. (Há regra que permite uma parcela ser vencida antecipadamente)
is_collection_enabledbooleanFlag que informa se a coleta está habilitada para esta parcela.
is_settledbooleanFlag que informa se a parcela está quitada
is_accrual_enabledbooleanFlag que informa se a parcela está com o accrual de juros habilitado
total_paiddecimalValor pago na parcela
total_interest_economydecimalValor total de economia de juros
creation_datedateTimeData em que a parcela foi criada
last_update_datedateTimeData da última atualização da parcela

🚧

Regras das flags

  • IsOverdue:

    • Só pode ser atualizada para 'true' se isSettled = 'false';
    • Devemos garantir que isOverdue = 'true':
      • a partir da d+1 da dueDate OU
      • quando installmentPlan.antecipatedMaturity for atualizado para 'true';
  • IsCollectionEnabled:

    • Devemos atualizar isCollectionEnabled para 'true' se:
      • currentDate = startDate
      • presentBalance > 1
      • installmentPlan.isActive = 'true'
    • Devemos atualizar isCollectionEnabled para 'false' se:
      • installmentPlan.isActive for atualizado para 'false'
    • Deve ser possível atualizar isCollectionEnabled manualmente para 'true', se:
      • presentBalance > 1
      • installmentPlan.isActive = 'true'
    • Deve ser possível atualizar manualmente isCollectionEnabled para 'false' apenas se currenteDate < startDate
    • A primeira data de ativação da coleta determina a collectionActivationDate da parcela
  • IsSettled:

    • Deve ser dinâmico, seguindo a regra se presentBalance < 1, então 'true', se não, 'false'
    • A última data de quitação determina a settlementDate da parcela
  • IsAccrualEnabled:

    • Devemos garantir que IsAccrualEnabled = 'true' apenas se:
      • isOverdue = 'true'
      • isSettled = 'false'
      • installmentPlan.isActive = 'true'
    • O estado da flag depende da confirmação do FinancialController