Home Broker
classDiagram
%% Define the Investor class
class Investor {
- id: int
- name: char[]
- balance: double
+ createOrder()
+ checkOrderStatus()
+ viewPortfolio()
}
%% Define the Order class
class Order {
- id: int
- type: char[] % buy or sell
- stock: Ticker
- quantity: int
- status: char[]
+ execute()
+ cancel()
}
%% Define the Ticket class
class Ticket {
- code: char[] % stock code
- companyName: char[]
- currentPrice: double
+ generateTicket()
}
%% Define the System class
class System {
- tickers: Ticket[]
- orderQueue: Queue<Order>
+ processOrders()
+ addOrder(order: Order)
+ addTicket(order: Order)
}
%% Define the Transaction class
class Transaction {
- id: int
- order: Order
- value: double
- date: struct tm
- ticketCode: char[]
+ record()
}
%% Define the Portfolio class
class Portfolio {
- id: int
- investor: Investor
- stocks: Map<char[], int>
+ addStock(stock: char[], quantity: int)
+ removeStock(stock: char[], quantity: int)
+ checkQuantities()
+ updateCurrentValue()
}
%% Define relationships between classes
Investor "1" -- "0..*" Order : creates >
Investor "1" -- "1" Portfolio : owns >
System "1" -- "0..*" Order : processes >
System "1" -- "0..*" Ticket : register >
Order "1" -- "0..*" Transaction : results in >
Transaction "1" -- "1" Ticket : refers to >
Portfolio "1" -- "0..*" Order : includes >
1. Caso de Uso: Criar Ordem de Compra ou Venda
Descrição
O investidor cria uma ordem para comprar ou vender ações. Esta ordem será processada pelo sistema e, se executada, gerará um ticket.
Diagrama Sequencial
sequenceDiagram
participant Investor
participant System
participant Order
participant Ticket
Investor->>System: createOrder()
System->>Order: new Order()
Order->>System: Order created
System->>Order: processOrder()
Order->>System: Order processed
System->>Ticket: generateTicket(order)
Ticket->>System: Ticket generated
System->>Investor: notifyOrderStatus()
Observações
- Validação de Ordem: O sistema deve validar se o investidor tem saldo suficiente para a compra ou se possui ações suficientes para a venda.
- Estado da Ordem: A ordem deve ser marcada como “pendente” até que seja processada e, depois, “executada” ou “cancelada”.
2. Caso de Uso: Consultar Status da Ordem
Descrição
O investidor consulta o status de uma ordem para verificar se foi executada, está pendente ou foi cancelada.
Diagrama Sequencial
sequenceDiagram
participant Investor
participant System
participant Order
Investor->>System: checkOrderStatus(orderId)
System->>Order: getOrderStatus(orderId)
Order->>System: Order status
System->>Investor: returnOrderStatus()
Observações
- Estado da Ordem: O sistema deve retornar um status claro: “pendente”, “executada” ou “cancelada”.
- Atualização: O status da ordem deve ser atualizado automaticamente quando a ordem é processada ou cancelada.
3. Caso de Uso: Gerar Ticket
Descrição
Após a execução de uma ordem, o sistema gera um ticket que detalha a transação realizada.
Diagrama Sequencial
sequenceDiagram
participant System
participant Order
participant Ticket
System->>Order: getOrderDetails()
Order->>System: Order details
System->>Ticket: createTicket(order)
Ticket->>System: Ticket created
System->>Investor: sendTicket(ticket)
Observações
- Detalhes do Ticket: O ticket deve incluir informações como o valor da transação, a data e a hora, e o tipo de transação (compra ou venda).
- Notificação: O ticket deve ser enviado ao investidor por meio de notificação ou e-mail.
4. Caso de Uso: Consultar Portfólio
Descrição
O investidor consulta o seu portfólio para verificar quais ações possui e suas quantidades.
Diagrama Sequencial
sequenceDiagram
participant Investor
participant System
participant Portfolio
Investor->>System: viewPortfolio()
System->>Portfolio: getPortfolioDetails(investorId)
Portfolio->>System: Portfolio details
System->>Investor: returnPortfolioDetails()
Observações
- Atualização do Portfólio: O portfólio deve ser atualizado sempre que uma nova ordem é executada.
- Visualização: O portfólio deve mostrar as ações atuais, quantidades e valores atualizados.
5. Caso de Uso: Atualizar Valor do Portfólio
Descrição
O sistema atualiza o valor das ações no portfólio com base nas cotações mais recentes.
Diagrama Sequencial
sequenceDiagram
participant System
participant Portfolio
participant MarketAPI
System->>MarketAPI: requestCurrentStockPrices()
MarketAPI->>System: current stock prices
System->>Portfolio: updateStockValues(prices)
Portfolio->>System: values updated
System->>Investor: notifyPortfolioUpdate()
Observações
- Fontes de Dados: O sistema deve obter as cotações das ações de uma API de mercado.
- Frequência de Atualização: O valor do portfólio deve ser atualizado regularmente ou quando uma ordem é executada.
Esses diagramas sequenciais e observações detalham o fluxo de interação e as regras de negócios associadas a cada caso de uso no sistema Home Broker. Se precisar de mais informações ou ajustes, estou à disposição!