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!

Referências