Conta e Cartão
Sobre os modelos Account e Card
Modelo Account
O modelo Account é responsável por representar uma conta bancária.
Ele armazena informações essenciais como a identificação do titular (através do CPF ou CNPJ),
nome do titular, número da conta, saldo e status da conta (ativo, inativo ou bloqueado).
Source code in payment_emulation\payment\models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
Campos do modelo Account
-
cpf
- Tipo:
CharField - Máximo de caracteres: 11
- Opções:
blank=True,null=True,unique=True - Verbose name: "CPF"
- Observação:
- Não há valor padrão.
- Deve ser informado ou o campo
cnpj(mas não ambos).
- Tipo:
-
cnpj
- Tipo:
CharField - Máximo de caracteres: 14
- Opções:
blank=True,null=True,unique=True - Verbose name: "CNPJ"
- Observação:
- Não há valor padrão.
- Assim como o
cpf, deve ser informado de forma exclusiva.
- Tipo:
-
account_holder_name
- Tipo:
CharField - Máximo de caracteres: 100
- Observação:
- Não há valor padrão.
- No método
save(), o valor é convertido para letras maiúsculas para padronização.
- Tipo:
-
account_number
- Tipo:
CharField - Máximo de caracteres: 20
- Opções:
blank=True,null=True,unique=True - Observação:
- Caso não seja informado, o método
save()utiliza a função utilitáriagenerate_account_number()para gerar um número de conta único automaticamente.
- Caso não seja informado, o método
- Tipo:
-
balance
- Tipo:
DecimalField - Máximo de dígitos: 12
- Casas decimais: 2
- Valor padrão:
0.00 - Observação:
- Se não for fornecido, o saldo inicia com o valor padrão de 0.00.
- Tipo:
-
status
- Tipo:
CharField - Máximo de caracteres: 2
- Opções (choices):
'AC': active'IN': inactive'BL': blocked
- Valor padrão:
'AC' - Observação:
- Se não informado, o status será definido como "active" (
'AC').
- Se não informado, o status será definido como "active" (
- Tipo:
-
created_at
- Tipo:
DateTimeField - Opção:
auto_now_add=True - Observação:
- Atribui automaticamente a data e hora da criação do registro.
- Tipo:
-
updated_at
- Tipo:
DateTimeField - Opção:
auto_now=True - Observação:
- Atualiza automaticamente a data e hora sempre que o registro é salvo.
- Tipo:
Comportamento do método save() (Account):
- Executa
full_clean()para validar os dados. - Converte o
account_holder_namepara letras maiúsculas. - Se o
account_numbernão for informado, gera um número de conta único via função utilitáriagenerate_account_number().
Modelo Card
O modelo Card está vinculado a uma conta (Account) e representa um cartão bancário associado a essa conta. Ele gerencia informações como o titular do cartão, número do cartão, validade, código CVV, bandeira do cartão, status de ativação e o PIN.
Source code in payment_emulation\payment\models.py
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | |
Campos do modelo Card
-
account
- Tipo:
ForeignKeypara o modelo Account - Comportamento:
- Relacionamento obrigatório com a conta (
Account). - Em caso de deleção da conta associada, o cartão também é removido (
on_delete=models.CASCADE).
- Relacionamento obrigatório com a conta (
- Tipo:
-
card_holder_name
- Tipo:
CharField - Máximo de caracteres: 50
- Observação:
- Campo obrigatório.
- No
save(), o nome do titular é convertido para letras maiúsculas.
- Tipo:
-
card_number
- Tipo:
CharField - Máximo de caracteres: 16
- Opções:
blank=True,null=True,unique=True - Observação:
- Se não for informado, o método
save()utiliza a função utilitáriagenerate_card_number(flag)(ondeflagé o valor decard_flag) para gerar um número de cartão válido e único.
- Se não for informado, o método
- Tipo:
-
validity
- Tipo:
DateField - Opções:
blank=True,null=True - Observação:
- Caso não seja informado, o método
save()define sua validade utilizando o método estáticocreate_validity(), que retorna a data atual acrescida de 5 anos.
- Caso não seja informado, o método
- Tipo:
-
cvv
- Tipo:
CharField - Máximo de caracteres: 4
- Verbose name: "CVV"
- Opções:
blank=True,null=True - Observação:
- Se não informado, durante o
save(), o CVV é gerado automaticamente via função utilitáriagenerate_cvv(), utilizando ocard_number, avaliditye uma chave secreta (secret).
- Se não informado, durante o
- Tipo:
-
card_flag
- Tipo:
CharField - Máximo de caracteres: 5
- Opções (choices):
'VISA': Visa'MC': MasterCard'ELO': Elo'OTHER': Other
- Observação:
- Campo obrigatório, define a bandeira do cartão.
- Os cartões criados com a bandeira
'OTHER'resultará em uma transaçãopending.
- Tipo:
-
active
- Tipo:
BooleanField - Valor padrão:
True - Observação:
- Indica se o cartão está ativo ou não.
- Tipo:
-
pin
- Tipo:
CharField - Máximo de caracteres: 255
- Observação:
- Campo obrigatório.
- Durante a criação (quando o registro ainda não possui
pk), o métodoclean()valida que opincontenha apenas dígitos e tenha, no mínimo, 4 caracteres. - No
save(), se opinfor composto apenas de dígitos, ele é criptografado utilizandohashers.make_password().
- Tipo:
-
created_at
- Tipo:
DateTimeField - Opção:
auto_now_add=True - Observação:
- Armazena a data e hora de criação do registro automaticamente.
- Tipo:
-
updated_at
- Tipo:
DateTimeField - Opção:
auto_now=True - Observação:
- Atualiza automaticamente a data e hora sempre que o registro é salvo.
- Tipo:
Comportamento do método save() (Card):
- Executa
full_clean()para validar os dados. - Converte o
card_holder_namepara letras maiúsculas. - Se o
card_numbernão for informado, gera-o automaticamente via função utilitáriagenerate_card_number(). - Se o
pinfor composto apenas por dígitos, o mesmo é criptografado. - Se a
validitynão for informada, é a data atual mais 5 anos (viacreate_validity()). - Se o
cvvnão for informado, gera-o automaticamente utilizando a função utilitáriagenerate_cvv().
Como criar uma conta e cartão
A seguir veja um exemplo de como criar uma nova conta e cartão.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |