private void summariseDemand(Base base) {
    shortages.removeAllItems() ;
    surpluses.removeAllItems() ;
    
    final World world = base.world ;
    final Tile t = world.tileAt(0, 0) ;
    
    for (Object o : world.presences.matchesNear(SupplyDepot.class, t, -1)) {
      final SupplyDepot venue = (SupplyDepot) o ;
      if (venue.base() != base) continue ;
      for (Service type : ALL_COMMODITIES) {
        final float shortage = venue.importShortage(type) ;
        if (shortage > 0) shortages.addItem(Item.withAmount(type, shortage)) ;
        final float surplus = venue.exportSurplus(type) ;
        if (surplus  > 0) surpluses.addItem(Item.withAmount(type, surplus )) ;
      }
    }
    
    for (Item item : shortages.allItems()) {
      shortages.removeItem(item) ;
      final float bump = (float) Math.ceil(item.amount / 5f) * 5 ;
      shortages.addItem(Item.withAmount(item, bump)) ;
    }
  }