package domain import ( "time" "github.com/google/uuid" "github.com/shopspring/decimal" ) // FinancialCategory represents a category for income or expenses type FinancialCategory struct { ID uuid.UUID `json:"id" db:"id"` TenantID uuid.UUID `json:"tenant_id" db:"tenant_id"` Name string `json:"name" db:"name"` Type string `json:"type" db:"type"` // income, expense Color string `json:"color" db:"color"` IsActive bool `json:"is_active" db:"is_active"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // BankAccount represents a financial account in the agency type BankAccount struct { ID uuid.UUID `json:"id" db:"id"` TenantID uuid.UUID `json:"tenant_id" db:"tenant_id"` Name string `json:"name" db:"name"` BankName string `json:"bank_name" db:"bank_name"` InitialBalance decimal.Decimal `json:"initial_balance" db:"initial_balance"` CurrentBalance decimal.Decimal `json:"current_balance" db:"current_balance"` IsActive bool `json:"is_active" db:"is_active"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // Entity represents a customer or supplier in the ERP type Entity struct { ID uuid.UUID `json:"id" db:"id"` TenantID uuid.UUID `json:"tenant_id" db:"tenant_id"` Name string `json:"name" db:"name"` Document string `json:"document" db:"document"` Email string `json:"email" db:"email"` Phone string `json:"phone" db:"phone"` Type string `json:"type" db:"type"` // customer, supplier, both Status string `json:"status" db:"status"` Address string `json:"address" db:"address"` City string `json:"city" db:"city"` State string `json:"state" db:"state"` Zip string `json:"zip" db:"zip"` Notes string `json:"notes" db:"notes"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // FinancialTransaction represents a single financial movement type FinancialTransaction struct { ID uuid.UUID `json:"id" db:"id"` TenantID uuid.UUID `json:"tenant_id" db:"tenant_id"` AccountID *uuid.UUID `json:"account_id" db:"account_id"` CategoryID *uuid.UUID `json:"category_id" db:"category_id"` EntityID *uuid.UUID `json:"entity_id" db:"entity_id"` CRMCustomerID *uuid.UUID `json:"crm_customer_id" db:"crm_customer_id"` CompanyID *uuid.UUID `json:"company_id" db:"company_id"` Description string `json:"description" db:"description"` Amount decimal.Decimal `json:"amount" db:"amount"` Type string `json:"type" db:"type"` // income, expense Status string `json:"status" db:"status"` // pending, paid, cancelled DueDate *time.Time `json:"due_date" db:"due_date"` PaymentDate *time.Time `json:"payment_date" db:"payment_date"` PaymentMethod string `json:"payment_method" db:"payment_method"` Attachments []string `json:"attachments" db:"attachments"` CreatedBy uuid.UUID `json:"created_by" db:"created_by"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // Product represents a product or service in the catalog type Product struct { ID uuid.UUID `json:"id" db:"id"` TenantID uuid.UUID `json:"tenant_id" db:"tenant_id"` Name string `json:"name" db:"name"` SKU string `json:"sku" db:"sku"` Description string `json:"description" db:"description"` Price decimal.Decimal `json:"price" db:"price"` CostPrice decimal.Decimal `json:"cost_price" db:"cost_price"` Type string `json:"type" db:"type"` // product, service StockQuantity int `json:"stock_quantity" db:"stock_quantity"` IsActive bool `json:"is_active" db:"is_active"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // Order represents a sales or service order type Order struct { ID uuid.UUID `json:"id" db:"id"` TenantID uuid.UUID `json:"tenant_id" db:"tenant_id"` CustomerID *uuid.UUID `json:"customer_id" db:"customer_id"` EntityID *uuid.UUID `json:"entity_id" db:"entity_id"` Status string `json:"status" db:"status"` // draft, confirmed, completed, cancelled TotalAmount decimal.Decimal `json:"total_amount" db:"total_amount"` Notes string `json:"notes" db:"notes"` CreatedBy uuid.UUID `json:"created_by" db:"created_by"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // OrderItem represents an item within an order type OrderItem struct { ID uuid.UUID `json:"id" db:"id"` OrderID uuid.UUID `json:"order_id" db:"order_id"` ProductID uuid.UUID `json:"product_id" db:"product_id"` Quantity int `json:"quantity" db:"quantity"` UnitPrice decimal.Decimal `json:"unit_price" db:"unit_price"` TotalPrice decimal.Decimal `json:"total_price" db:"total_price"` CreatedAt time.Time `json:"created_at" db:"created_at"` }