classDiagram
    class Warehouse {
        %% TODO include_serialization_thing?
        -balance: double
    }

    class Product {

    }

    class SimpleProduct {

    }

    class DerivedProduct {

    }

    class Batch {
        -quantity: int
        -price: double
    }

    class Partner {
        -name: String
        -address: String
    }

    class PartnerStatute {
        <<abstract>>
        -name: String
    }

    class NormalPartnerStatute {
        
    }

    class SelectionPartnerStatute {

    }

    class ElitePartnerStatute {

    }

    class Recipe {
        -aggravatingFactor: double
    }

    class RecipeProduct {
        -quantity: int
    }

    class Transaction {
        -value: double
    }

    class BreakdownTransaction {

    }

    class SaleTransaction {

    }

    class AcquisitionTransaction {

    }

    Product <|-- SimpleProduct
    Product <|-- DerivedProduct

    Recipe "1" *--> "*" RecipeProduct: -recipeProducts
    DerivedProduct --> Recipe: -recipe
    RecipeProduct --> Product: -product

    Transaction <|-- BreakdownTransaction
    Transaction <|-- SaleTransaction
    Transaction <|-- AcquisitionTransaction

    Batch --> Partner: -partner
    Transaction --> Partner: -partner
    Batch --> Product: -product

    Partner --> PartnerStatute: -statute
    Partner "1" o-- "*" Transaction: -transactions

    PartnerStatute <|-- NormalPartnerStatute
    PartnerStatute <|-- SelectionPartnerStatute
    PartnerStatute <|-- ElitePartnerStatute

    Product "1" o-- "*" Batch: -batches
