Adapters

public interface IAccountBalanceAdapter
{
    Kodi.Kodiak.Services.DataContracts.Allocations.AccountBalanceResponse GetAccountBalance(Kodi.Kodiak.Services.DataContracts.Allocations.AccountBalanceRequest request, string username);
}
public interface IAllocationAdapter
{
    Kodi.Kodiak.Services.DataContracts.BackOffice.SendToBackOfficeResponse SendToBackOffice(Domain.Model.Allocation allocation, string username);
    Kodi.Kodiak.Services.DataContracts.BackOffice.SendToBackOfficeResponse SendToBackOffice(Domain.Model.Allocation allocation, string username, string counterpartyPortfolioExternalReferenceId);
    Kodi.Kodiak.Services.DataContracts.AllocationMessages.CancelAllocationResponse CancelAllocation(Kodi.Kodiak.Services.DataContracts.AllocationMessages.CancelAllocationRequest request, string username);
    void UpdateResentAllocations();
}
public interface IFundAdapter
{
    CalculateFundOrderResponse CalculateFundOrder(CalculateFundOrderRequest message);
    CreateFundOrderResponse CreateFundOrder(CreateFundOrderRequest message);
    UpdateFundOrderResponse UpdateFundOrder(UpdateFundOrderRequest message);
    CancelFundOrderResponse CancelFundOrder(CancelFundOrderRequest message);
    FundPrices GetFundPrices(string symbol);	
}
public interface IFundCalculator
{
    Kodi.Kodiak.Services.DataContracts.FundOrders.CalculateFundOrderResponse CalculateFundOrder(Kodi.Kodiak.Services.DataContracts.FundOrders.CalculateFundOrderRequestInternal message);
}
public interface IFundPriceAdapter
{
    Services.DataContracts.FundPrices GetFundPrice(string symbol);
}
public interface IFundServer
    {
        void Start();
        void Stop();
    string GetStatus();
    }
public interface IInvoiceAdapter
{
    Stream GenerateInvoiceForOrderInstruction(Kodi.Kodiak.Domain.Model.OrderInstruction orderInstruction);
    Stream GenerateInvoiceForAllocation(Kodi.Kodiak.Domain.Model.Allocation allocation);
}
public interface IOrderCalculationAdapter
{
    CalculateOrderResponse CalculateOrder(CalculateOrderRequest request, Domain.Model.Instrument instrument, string username);
}
public interface IOrderValidationAdapter
{
    ValidateOrderInstructionResponse Validate(Kodi.Kodiak.Services.DataContracts.AllocationMessages.CreateAllocationRequest request);
    ValidateOrderInstructionResponse Validate(Kodi.Kodiak.Services.DataContracts.AllocationMessages.CreateOffExchangeOrderRequest request, Kodi.Kodiak.Services.DataContracts.AllocationMessages.CreateOffExchangeOrderRequest counterpartyRequest);
    ValidateOrderInstructionResponse Validate(CreateOrderInstructionRequest request);
    ValidateOrderInstructionResponse Validate(UpdateOrderInstructionRequest request);
}
public interface IPortfolioPositionAdapter
{
    Kodi.Kodiak.Services.DataContracts.Allocations.PortfolioPositionResponse GetPortfolioPosition(Kodi.Kodiak.Services.DataContracts.Allocations.PortfolioPositionRequest request, string username);
}
public interface IPortfolioViewAdapter
{
    List<Kodi.Kodiak.Services.DataContracts.PortfolioView.PortfolioView> GetPortfolio(string customerSSN, bool isMarketMaker, string username);
}
public interface IServerEntryPoint
{
    void Start();
    void Stop();
}
public interface IStatusMonitoringEndpoint
{
    ServiceHealth GetStatus();
}