An open API service indexing awesome lists of open source software.

https://github.com/sisoudev/core-banking-sb


https://github.com/sisoudev/core-banking-sb

Last synced: 12 months ago
JSON representation

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
![hLZDZjiu4hxxARIPGquvB303p3Q2ngXbEH4Y_q2oEyZ9eAMoJGn5Qacg9vxqFCoU5liSUR4bHTCKczR00VfYcFLJzTLFaI9_4n9nsJLayeyQzfX2b6SVFguVyaqQ_PJ-S_RBBFKv7ueqNIZMhxDVqbzzrfSqpvUVevzcizc_afzztYfRV5AS9FqvJIQJjr5A9QvH3I9gEQOLRX4M4xGJa](https://github.com/user-attachments/assets/972ced64-5496-42dd-89d2-f2bb7666f499)

![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