https://github.com/sisoudev/core-banking-sb
https://github.com/sisoudev/core-banking-sb
Last synced: 12 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/sisoudev/core-banking-sb
- Owner: SisouDev
- Created: 2025-06-09T18:43:40.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-06-10T18:06:23.000Z (12 months ago)
- Last Synced: 2025-06-10T19:39:15.396Z (12 months ago)
- Language: Java
- Size: 75.2 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## 📘 1. Introdução
### 1.1. Propósito do Documento
Este documento descreve a arquitetura, o modelo de dados e as decisões de design utilizadas na construção do sistema.
Serve como **referência técnica** para toda a equipe de desenvolvimento, garantindo uma compreensão clara e unificada dos componentes do sistema, suas responsabilidades e interações.
Objetivos principais:
- Criar um sistema modular, escalável e de fácil manutenção;
- Aplicar padrões de projeto robustos;
- Adotar boas práticas de engenharia de software e design orientado a objetos.
### 1.2. Escopo do Sistema
Funcionalidades contempladas:
- **Gerenciamento de Clientes e Contas** (Pessoa Física e Jurídica);
- **Operações Financeiras** (Depósitos, Saques, Transferências, Pagamentos);
- **Produtos Bancários** (Empréstimos, Seguros, Investimentos);
- **Gerenciamento de Cartões** (Débito, Crédito, ou ambos);
- **Acesso e Segurança** com controle baseado em papéis (Cliente, Gerente, Analista, Administrador).
### 1.3. Definições, Acrônimos e Abreviações
| Termo | Definição |
|---------------|----------|
| **DDS** | Documento de Design de Software |
| **UML** | Unified Modeling Language |
| **BD** | Banco de Dados |
| **API** | Application Programming Interface |
| **Strategy** | Padrão comportamental para encapsular comportamentos |
| **Factory** | Padrão criacional para instanciar objetos via superclasse |
| **@MapsId** | Anotação JPA para chave primária compartilhada entre entidades |
---
## 🧱 2. Arquitetura e Visão Geral do Design
### 2.1. Visão Arquitetural
- Arquitetura baseada em componentes com **separação de responsabilidades**;
- Modelo de domínio **rico**, centrado em entidades como `Customer`, `Account`, `BankingProduct`;
- Persistência com **ORM (JPA)** mapeando para banco de dados relacional;
- Decisões de design:
#### Herança para Tipificação
- Ex: `Customer → PersonalCustomer` / `BusinessCustomer`
#### Composição para Funcionalidades Extensíveis
- Ex: `Card` compõe `DebitFunction` e `CreditFunction`
#### Strategy para Comportamentos Variáveis
- Ex: Tipos de Conta (`CheckingAccountStrategy`, `SavingsAccountStrategy`)
### 2.2. Diagrama de Casos de Uso
**Atores principais:**
- **Cliente:** Consultas, transações, produtos.
- **Gerente:** Cadastro, gerenciamento de contas, aprovação de serviços.
- **Analista:** Análise de risco e recomendação de investimentos.
- **Administrador:** Controle de parâmetros e usuários internos.
---
## 🗃️ 3. Modelo de Dados Detalhado
### 3.1. Diagrama de Classes

![Uploading «entity»Customerid: Longphone: Stringaddress: Addressuser: User«entity»PersonalCustomername: StringtaxId: StringbirthDate: LocalDate«entity»BusinessCustomercompanyName: StringtradeName: StringregistrationNumber: String«entity»Userid: Longemail: Stringpassword: Stringrole: RoleuserStatus: UserStatuscreatedAt: LocalDateTimeupdatedAt: LocalDateTime«entity»Employeeid: LongfirstName: StringlastName: StringregistrationCode: StringhireDate: LocalDateTimeuser: User«entity»AccountManagerid: Longemployee: EmployeemanagedAccounts: List<Account>«entity»Accountid: Longagency: Stringnumber: Stringbalance: BigDecimalaccountType: AccountTypeaccountStatus: AccountStatuscustomer: CustomeraccountManager: AccountManagertransactions: List<Transaction>createdAt: LocalDateTimeupdatedAt: LocalDateTime«entity»Transactionid: Longamount: BigDecimaltype: TransactionTypedescription: Stringtimestamp: LocalDateTimeaccount: Account«entity»Cardid: Longnumber: StringholderName: StringexpirationDate: YearMonthstatus: CardStatusaccount: AccountdebitFunction: DebitFunctioncreditFunction: CreditFunction«entity»DebitFunctionid: Longcard: CarddailyWithdrawalLimit: BigDecimaldailyTransactionLimit: BigDecimal«entity»CreditFunctionid: LongcreditLimit: BigDecimalavailableLimit: BigDecimalinvoiceClosingDay: Integercard: Cardinvoices: List<Invoice>«entity»Invoiceid: LongtotalAmount: BigDecimaldueDate: LocalDateclosingDate: LocalDatereferenceMonth: YearMonthinvoiceStatus: InvoiceStatuscreditFunction: CreditFunctionitems: List<InvoiceItem>«entity»InvoiceItemid: Longdescription: Stringamount: BigDecimalpurchaseDate: LocalDateTimeinvoice: Invoice«entity»BankingProductid: Longname: Stringdescription: Stringactive: boolean«entity»LoanProductminAmount: BigDecimalmaxAmount: BigDecimaldefaultInterestRate: BigDecimalmaxInstallments: Integer«entity»InvestmentProductriskLevel: InvestmentRiskLevelminInitialInvestment: BigDecimaladminFeePercentage: BigDecimalredemptionTermInDays: intassetClass: String«entity»InsuranceProductcoverageDetails: StringmonthlyPremium: BigDecimalinsuredAmount: BigDecimalminEligibleAge: intmaxEligibleAge: int«entity»Loanid: LongprincipalAmount: BigDecimalinterestRate: BigDecimalnumberOfInstallments: IntegerloanStatus: LoanStatusdisbursementDate: LocalDateTimecustomer: CustomerloanProduct: LoanProductloanInstallments: List<LoanInstallment>createdAt: LocalDateTimeupdatedAt: LocalDateTime«entity»LoanInstallmentid: LonginstallmentNumber: IntegertotalAmount: BigDecimalprincipalAmount: BigDecimalinterestAmount: BigDecimaldueDate: LocalDatepaymentDate: LocalDateTimeinstallmentStatus: InstallmentStatusloan: Loan«entity»Investmentid: Longcustomer: Customerproduct: InvestmentProductquantity: BigDecimaltotalInvestedAmount: BigDecimalcurrentValue: BigDecimalfirstInvestmentDate: LocalDatestatus: InvestmentStatuscreatedAt: LocalDateTimeupdatedAt: LocalDateTime«entity»Insuranceid: Longcustomer: Customerproduct: InsuranceProductpolicyNumber: StringpremiumAmount: BigDecimalcoverageAmount: BigDecimaleffectiveDate: LocalDateexpirationDate: LocalDatestatus: InsuranceStatuscreatedAt: LocalDateTimeupdatedAt: LocalDateTime«embeddable»Addressstreet: Stringnumber: Stringcomplement: Stringneighborhood: Stringcity: Stringstate: StringzipCode: StringAccountTypeCHECKING_ACCOUNTSAVINGS_ACCOUNTAccountStatusACTIVEBLOCKEDCLOSEDTransactionTypeDEPOSITWITHDRAWALTRANSFER_SENTTRANSFER_RECEIVEDDEBIT_CARD_PURCHASECREDIT_CARD_BILL_PAYMENTLOAN_DISBURSEMENTLOAN_INSTALLMENT_PAYMENTINVESTMENT_PURCHASEINVESTMENT_REDEMPTIONINSURANCE_PREMIUM_PAYMENTRoleACCOUNT_MANAGERANALYSTADMINCUSTOMERUserStatusACTIVEPENDING_VERIFICATIONBLOCKEDINACTIVEpossuipertence atemcontratarealizapossuiembedstempode sergerenciagerenciada porpossuipossui