allocates drums to available storage space StorageAllocation
applies depot safety policies during storage allocation  


knows a kind of EPA hazard Hazard
knows how many drums are assigned to a storage building StorageBuilding
allocates drum storage to a storage building  
applies drum storage safety policies during allocation  
StorageAllocation class  
produces prospective storage allocations  
balances storage across prospective allocations  


knows a building identifier  
knows its location within the depot (address)  
knows its physical dimensions Perimeter


knows an origin Point
knows a boundary extent (width x depth) Point
can expand itself by some interval  
can determine whether it overlaps another perimeter  


StorageBuilding extends Building
stores drums containing hazardous chemicals DrumStorage
may only ever store two compatible hazard types EpaCompliance?


has a storage license for a specific kind of hazard StorageLicense
knows how many drums it can store (storage limit)  
contains some drums Drum
knows how many more drums it can store (remaining capacity)  


applies to a kind of EPA hazard Hazard
applies to a specific storage building StorageBuilding
knows a drum storage limit  
StorageLicense class  
maintains a license inventory (assets)  
provies access to licenses by hazard  


identifies a kind of EPA hazard  
Hazard class  
provides access to the registered hazard types: 1, 2, 3  


knows a drum identifier  
contains a hazardous chemical Chemical
knows its measurements Weight


knows its name  
knows a formula  
knows its EPA hazard classification Hazard
Chemical class  
maintains a chemical registry  
provides access to chemicals by name  
provides access to chemicals by formula