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
Campos | Tipo | Descrição |
---|---|---|
id | string | Identificador único da parcela |
installment_plan_id | string | Identificador do plano de parcelamento a que se refere aquela parcela |
account_id | string | Identificador da conta (no AccountingService) relacionada a parcela |
number | inteiro | Número ordinal que identifica qual é a parcela |
start_date | date | Data 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_date | date | Data 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_date | date | Data de vencimento antecipado da parcela. Será nula caso o plano de parcelamento não tenha vencimento antecipado |
settlement_date | date | Data em que a parcela foi quitada |
collection_activation_date | date | Data de ativação da coleta para a parcela. (Pode ser ativada antes da start_date) |
initial_amount | decimal | Valor inicial total da parcela |
total_future_balance | decimal | Saldo "absoluto" da parcela (soma dos lançamentos) |
total_present_balance | decimal | Valor presente do saldo da parcela (valor devido) |
overdue_balance | decimal | Valor da parcela no dia do vencimento |
is_overdue | boolean | Flag que informa se a parcela está vencida. (Há regra que permite uma parcela ser vencida antecipadamente) |
is_collection_enabled | boolean | Flag que informa se a coleta está habilitada para esta parcela. |
is_settled | boolean | Flag que informa se a parcela está quitada |
is_accrual_enabled | boolean | Flag que informa se a parcela está com o accrual de juros habilitado |
total_paid | decimal | Valor pago na parcela |
total_interest_economy | decimal | Valor total de economia de juros |
creation_date | dateTime | Data em que a parcela foi criada |
last_update_date | dateTime | Data 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