# Feature de Fatura
## Requisitos
- Data de vencimento e data de fechamento
- Status de fatura: `ABERTA`, `FECHADA`, `ATRASADA`, `PAGA`
- Valor total por fatura
- 1 fatura por mês
- Cada fatura tem detalhes, separado por cartão
- Cada item da fatura é uma “compra”
- Pagamento de fatura POR CARTÃO
## Perguntas
> [!note]- SOLVED
> - O que acontece caso o cliente ainda não tenha selecionado uma data de vencimento do cartão? Qual é a data default?
> - Não gostei muito dessa confirmação de pagamento pela conta da barte
> - Parece que a tela não muda nada uma para outra, acho que vai acabar confundindo
> - Pode ter uma telinha de “saldo antes” e “saldo depois”
> - A tela de copiar a chave pix também ficou bem simples, não vale uma explicação do que vai acontecer depois do pagamento? Se ele vai ter que esperar alguns minutos até o saldo da fatura dele atualizar, um botão de “já paguei” pra forçar uma atualização do nosso lado e pegar possíveis erros etc
> - `BankingCardInvoiceEntity`: como que eu faço pra construir o virtual card relation? Eu deixo ele como string?
> - Eu deixo tudo como *nullable* na Entity mesmo?
> - `CreateVirtualCardImplTest`: Como que eu resolvo esse teste?
## Refinement
![[Refinamento Fatura de Cartão]]
## Step by Step
> [!note] A progressão de faturas vai ser criada no cron job, que não vai ser eu que vou fazer, então só preciso criar quando o cartão é criado
### Infra e listagens
- [x] Criar uma fatura sempre que um cartão é criado
- Fatura em aberto
- Sem transactions
- [x] Get de faturas
- Controller
- Service
- Gateway
- Adapter
- [x] Get de uma fatura
- [x] Arrumar o teste de criação de fatura (tá bloqueando por conta do requisito de due day)
### Pagamento
- [x] Fazer entidade e repositório de `BankingCardInvoicePaymentEntity`
- [x] Fazer ligação com a `BankingCardInvoice` via @JoinTable
- [x] Endpoint `/cards/invoices/ready-for-payment`
- [x] Feign com swap para gerar pix
- [ ] Endpoint de pagamento de invoice
- [ ] Com pix
- [ ] Com saldo da conta
- [ ] Ajustar listener de PIX IN
- [ ] Endpoint para verificar invoice pendente
## Testes
- [x] Tentar criar cartão sem data de vencimento
- [x] Atualizar data de vencimento
- [x] Tentar atualizar data de vencimento dnovo (tem que retornar erro)
- [x] Criar um cartão com data de vencimento
- [x] Listar faturas
- [x] Listar faturas do mês