class DurchflusstabelleImpl implements Durchflusstabelle {

  static def QMAX_FAKTOR = 2

  static def tabelle = [
    (0.0..(15.0 - (Float.MIN_VALUE as BigDecimal))):
    [
      A:[QMIN: 0.04, QTRENN: 0.10, QMAX: QMAX_FAKTOR],
      B:[QMIN: 0.02, QTRENN: 0.08, QMAX: QMAX_FAKTOR],
      C:[QMIN: 0.01, QTRENN: 0.015, QMAX: QMAX_FAKTOR]
    ],
    (15.0..(Float.MAX_VALUE as BigDecimal)):
    [
      A:[QMIN: 0.08, QTRENN: 0.30, QMAX: QMAX_FAKTOR],
      B:[QMIN: 0.03, QTRENN: 0.20, QMAX: QMAX_FAKTOR],
      C:[QMIN: 0.006, QTRENN: 0.015, QMAX: QMAX_FAKTOR]
    ]
  ]

  int get(float nennweite, String metrologischeKlasse, String gesuchterWert,
      float messabweichungInProzent) {
    def faktor = tabelle
      .find{ eintrag -> (nennweite as BigDecimal) in eintrag.key }.value
      .find{ eintrag -> metrologischeKlasse == eintrag.key }.value
      .find{ eintrag -> gesuchterWert == eintrag.key}.value
    def durchfluss = nennweite * faktor * 1000
    (durchfluss + durchfluss * messabweichungInProzent / 100).round()
  }
}