@startuml

class Segregator {
    - type: Typ
    - items: List<Koszulka>
    + Segregator(type: Typ)
    + add(item: Koszulka): void
    + get(item: Koszulka): Dokument
    + remove(item: Koszulka): boolean
    + getAll(): List<Koszulka>
}

abstract class Dokument {
    - id: String
    # type: Typ
    + Dokument(id: String)
    + {abstract} setType(): void
}

class Faktura extends Dokument {
}
class Paragon extends Dokument {
}
class DokumentZUS extends Dokument {
}
class DokumentUS extends Dokument {
}
class DokumentInny extends Dokument {
}

class Koszulka {
    - document: Dokument
    + Koszulka()
    + Koszulka(document: Dokument)
    + put(item: Dokument): void
    + get(): Dokument
    + remove(): void
}

class Szafa {
    - items: List<Segregator>
    + Szafa()
    + add(item: Segregator): void
    + get(type: Typ): List<Segregator>
    + remove(item: Segregator): boolean
    + getType(): Typ
}

enum Typ {
    FAKTURA,
    PARAGON,
    POCZTA_PRZYCHODZACA,
    POCZTA_WYCHODZACA,
    POTWIERDZENIE,
    ZUS,
    US,
    MIESZANY
}

Szafa o-- Segregator
Segregator *-- Typ
Segregator o-- Koszulka
Koszulka o-- Dokument
Dokument *-- Typ

@enduml