View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   //CabaWeb
3   //Copyright (C) 2004  Thomas Vogt <Thomas.Vogt@TVC-Software.com>
4   //
5   //This library is free software; you can redistribute it and/or
6   //modify it under the terms of the GNU Lesser General Public
7   //License as published by the Free Software Foundation; either
8   //version 2.1 of the License, or (at your option) any later version.
9   //
10  //This library is distributed in the hope that it will be useful,
11  //but WITHOUT ANY WARRANTY; without even the implied warranty of
12  //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  //Lesser General Public License for more details.
14  //
15  //You should have received a copy of the GNU Lesser General Public
16  //License along with this library; if not, write to the Free Software
17  //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  ////////////////////////////////////////////////////////////////////////////////
19  
20  package org.fhw.cabaweb.math;
21  
22  import java.util.ArrayList;
23  
24  import org.fhw.cabaweb.data.dataobjects.Qualitaetssicherung;
25  import org.fhw.cabaweb.data.dataobjects.Verwaltungskosten;
26  
27  /***
28   * Klasse mit den Berechnungsfunktionen f&uuml;r die Produktion
29   *
30   * @author	<a href="mailto:thomas.vogt@tvc-software.com">Thomas Vogt</a>
31   * @version	Version 1.0 16.03-05.04.2004
32   */
33  public final class Produktion
34  {
35      /***
36       * Standardkonstruktor der nicht zug&auml;nglich sein soll, da dies eine Utility Klasse ist
37       */
38      protected Produktion()
39      {
40          throw new UnsupportedOperationException(); // Aufrufe aus eventuellen SubKlassen verhindern
41      }
42  
43      /***
44       * Interface mit den ben&ouml;tigten Konstanten
45       */
46      interface Konstanten
47      {
48          /***
49           * Zahl die Hundert Prozent repr&auml;sentiert (100.0)
50           */
51          public static final double HUNDRED_PERCENT = 100.0;
52      }
53  
54      /***
55       * Liefert die optimale Qualit&auml;tssicherung zur&uuml;ck
56       *
57       * @param	guteProduktionsmenge	Die gute Produktionsmenge
58       * @param	kapazitaetsauslastung	Die Kapazit&auml;tsauslastung
59       * @param	kapazitaetsbestandDiesesQuartal	Der Kapazit&auml;tsbestand an Stunden f&uuml;r diese Quartal
60       * @param	fertigungsstueckzeit	Die Fertigungsst&uuml;ckzeit
61       * @param	grundlohnkosten	Die Grundlohnkosten
62       * @param	lohnindex	Der Lohnerh&ouml;hungsindex
63       * @param	rohstoffverbrauch	Der Rohstoffverbrauch
64       * @param	rohstoffwert	Der Rohstoffwert
65       * @param	inflationsindex	Der Inflationsindex
66       * @param	ueberstundenzuschlag	Der &uuml;berstundenzuschlag
67       * @param	nacharbeitsaufwand		Der Nacharbeitsaufwand
68       * @param	qualitaetssicherungTabelle	Die ArrayList Tabelle mit den Zuordnungen QSAufwendungen - Fehlerrate - Ausschussrate
69       * @return	Die optimale Qualit&auml;tssicherung
70       */
71      public static final double qualitaetssicherungOptimal(
72          final double guteProduktionsmenge,
73          final double kapazitaetsauslastung,
74          final double kapazitaetsbestandDiesesQuartal,
75          final double fertigungsstueckzeit,
76          final double grundlohnkosten,
77          final double lohnindex,
78          final double rohstoffverbrauch,
79          final double rohstoffwert,
80          final double inflationsindex,
81          final double ueberstundenzuschlag,
82          final double nacharbeitsaufwand,
83          final ArrayList qualitaetssicherungTabelle)
84      {
85          double ergebnis = 0.0;
86  
87          double qualitaetssicherungNominal = 0.0;
88          double qualitaetssicherungOptimal = 0.0;
89          double qualitaetskostenOptimal = 99999999.0;
90          double qualitaetskostenTemp = 0.0;
91  
92          int groesseQualitaetssicherungTabelle = qualitaetssicherungTabelle.size();
93  
94          for (int i = 0; i <= (int) (((Qualitaetssicherung) qualitaetssicherungTabelle.get(groesseQualitaetssicherungTabelle - 1)).getQualitaetssicherungsausgaben() * 100); i++)
95          {
96              double qualtaetssicherungRealA = qualtaetssicherungReal(qualitaetssicherungNominal, inflationsindex);
97              double fehleranteilA = fehleranteil(qualtaetssicherungRealA, qualitaetssicherungTabelle) / Konstanten.HUNDRED_PERCENT;
98              double ausschussA = ausschuss(fehleranteilA);
99              double pmNominal = produktionsmengeNominal(guteProduktionsmenge, (ausschussA * Konstanten.HUNDRED_PERCENT));
100             double ausschusskostenA = ausschusskosten(pmNominal, ausschussA, fertigungsstueckzeit, grundlohnkosten, lohnindex, rohstoffverbrauch, rohstoffwert, kapazitaetsauslastung);
101 
102             double tempd2 = fertigungszeitOhneUeberstundenOhneNacharbeit(pmNominal, fertigungsstueckzeit);
103             double tempd3 = grundlohnkosten * lohnindex;
104             double tempd4 = nacharbeitsZeitOhneUeberstunden(((fehleranteilA - ausschussA) * pmNominal), fertigungsstueckzeit, (nacharbeitsaufwand - 1.0));
105             double tempd5 = normalkapazitaet(kapazitaetsauslastung, kapazitaetsbestandDiesesQuartal);
106             double tempd7 = fertigungszeitGesamtFertigungsLohnKosten(pmNominal, fertigungsstueckzeit, ((fehleranteilA - ausschussA) * pmNominal));
107 
108             double nacharbeitslohnkostenOhneUeberstundenA = nacharbeitslohnkostenOhneUeberstunden(tempd4, tempd3);
109             double ueberstundenzuschlagNacharbeitA = ueberstundenzuschlagNacharbeit(nacharbeitslohnkostenOhneUeberstundenA, tempd7, tempd2, tempd4, tempd5, tempd3);
110             double nacharbeitskostenA = lohnkosten(nacharbeitslohnkostenOhneUeberstundenA, ueberstundenzuschlagNacharbeitA);
111 
112             double fehlerkostenA = fehlerkosten(ausschusskostenA, nacharbeitskostenA);
113 
114             qualitaetskostenTemp = qualitaetskosten(pmNominal, inflationsindex, qualtaetssicherungRealA, fehlerkostenA);
115 
116             if (qualitaetskostenTemp <= qualitaetskostenOptimal)
117             {
118                 qualitaetskostenOptimal = qualitaetskostenTemp;
119                 qualitaetssicherungOptimal = qualitaetssicherungNominal;
120             }
121 
122             qualitaetssicherungNominal += 0.01;
123         }
124 
125         ergebnis = qualitaetskostenOptimal;
126 
127         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
128         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
129 
130         return rueckgabewert;
131     }
132 
133     /***
134      * Liefert den normale Qualit&auml;tssicherung zur&uuml;ck
135      *
136      * @param	guteProduktionsmenge	Die gute Produktionsmenge
137      * @param	kapazitaetsauslastung	Die Kapazit&auml;tsauslastung
138      * @param	kapazitaetsbestandDiesesQuartal	Der Kapazit&auml;tsbestand an Stunden f&uuml;r diese Quartal
139      * @param	fertigungsstueckzeit	Die Fertigungsst&uuml;ckzeit
140      * @param	grundlohnkosten	Die Grundlohnkosten
141      * @param	lohnindex	Der Lohnerh&ouml;hungsindex
142      * @param	rohstoffverbrauch	Der Rohstoffverbrauch
143      * @param	rohstoffwert	Der Rohstoffwert
144      * @param	inflationsindex	Der Inflationsindex
145      * @param	ueberstundenzuschlag	Der &uuml;berstundenzuschlag
146      * @param	nacharbeitsaufwand		Der Nacharbeitsaufwand
147      * @param	qualitaetssicherungNominal	Die nominalen QSAufwendungen gem&auml;฿ Unternehmensentscheidung
148      * @param	qualitaetssicherungTabelle	Die ArrayList Tabelle mit den Zuordnungen QSAufwendungen - Fehlerrate - Ausschussrate
149      * @return	Die normale Qualit&auml;tssicherung
150      */
151     public static final double qualitaetssicherungNormal(
152         final double guteProduktionsmenge,
153         final double kapazitaetsauslastung,
154         final double kapazitaetsbestandDiesesQuartal,
155         final double fertigungsstueckzeit,
156         final double grundlohnkosten,
157         final double lohnindex,
158         final double rohstoffverbrauch,
159         final double rohstoffwert,
160         final double inflationsindex,
161         final double ueberstundenzuschlag,
162         final double nacharbeitsaufwand,
163         final double qualitaetssicherungNominal,
164         final ArrayList qualitaetssicherungTabelle)
165     {
166         double ergebnis = 0.0;
167 
168         double qualitaetskostenNormal = 0.0;
169 
170         double qualtaetssicherungRealA = qualtaetssicherungReal(qualitaetssicherungNominal, inflationsindex);
171         double fehleranteilA = fehleranteil(qualtaetssicherungRealA, qualitaetssicherungTabelle) / Konstanten.HUNDRED_PERCENT;
172         double ausschussA = ausschuss(fehleranteilA);
173         double pmNominal = produktionsmengeNominal(guteProduktionsmenge, (ausschussA * Konstanten.HUNDRED_PERCENT));
174         double ausschusskostenA = ausschusskosten(pmNominal, ausschussA, fertigungsstueckzeit, grundlohnkosten, lohnindex, rohstoffverbrauch, rohstoffwert, kapazitaetsauslastung);
175 
176         double tempd2 = fertigungszeitOhneUeberstundenOhneNacharbeit(pmNominal, fertigungsstueckzeit);
177         double tempd3 = grundlohnkosten * lohnindex;
178         double tempd4 = nacharbeitsZeitOhneUeberstunden(((fehleranteilA - ausschussA) * pmNominal), fertigungsstueckzeit, (nacharbeitsaufwand - 1.0));
179         double tempd5 = normalkapazitaet(kapazitaetsauslastung, kapazitaetsbestandDiesesQuartal);
180         double tempd7 = fertigungszeitGesamtFertigungsLohnKosten(pmNominal, fertigungsstueckzeit, ((fehleranteilA - ausschussA) * pmNominal));
181 
182         double nacharbeitslohnkostenOhneUeberstundenA = nacharbeitslohnkostenOhneUeberstunden(tempd4, tempd3);
183         double ueberstundenzuschlagNacharbeitA = ueberstundenzuschlagNacharbeit(nacharbeitslohnkostenOhneUeberstundenA, tempd7, tempd2, tempd4, tempd5, tempd3);
184         double nacharbeitskostenA = lohnkosten(nacharbeitslohnkostenOhneUeberstundenA, ueberstundenzuschlagNacharbeitA);
185 
186         double fehlerkostenA = fehlerkosten(ausschusskostenA, nacharbeitskostenA);
187         qualitaetskostenNormal = qualitaetskosten(pmNominal, inflationsindex, qualtaetssicherungRealA, fehlerkostenA);
188 
189         ergebnis = qualitaetskostenNormal;
190 
191         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
192         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
193 
194         return rueckgabewert;
195     }
196 
197     /***
198      * Liefert die Herstellkosten zur&uuml;ck
199      *
200      * @param	produktion	Die Produktionskosten
201      * @param	beschaffung	Die Beschaffungskosten
202      * @param	overhead	Der Overhead
203      * @param	guteProduktionsmenge	Die gute Produktionsmenge
204      * @return	Die Herstellkosten
205      */
206     public static final double herstellKostenBewertung(final double produktion, final double beschaffung, final double overhead, final double guteProduktionsmenge)
207     {
208         double ergebnis = 0.0;
209 
210         if (guteProduktionsmenge > 0)
211             ergebnis = ((produktion + beschaffung + overhead) / guteProduktionsmenge);
212         else
213             ergebnis = ((produktion + beschaffung + overhead));
214 
215         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
216         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
217 
218         return rueckgabewert;
219     }
220 
221     /***
222      * Liefert den Quotient aus Lieferdefizit und Lagerbildung zur&uuml;ck
223      *
224      * @param	abgesetzteMenge	Die abgesetzte Menge
225      * @param	absetzbareMenge	Die absetzbare Menge
226      * @param	lieferdefizit	Das Lieferdefizt
227      * @param	lagerbestand	Der Lagerbestand an Fertigprodukten
228      * @return	Der Quotient aus Lieferdefizit und Lagerbildung
229      */
230     public static final double defizitUndLagerQuotient(final double abgesetzteMenge, final double absetzbareMenge, final double lieferdefizit, final double lagerbestand)
231     {
232         double ergebnis = 0.0;
233 
234         if ((absetzbareMenge - abgesetzteMenge) > 0)
235         {
236             ergebnis = (-Konstanten.HUNDRED_PERCENT * Common.divide(absetzbareMenge - abgesetzteMenge, abgesetzteMenge));
237         }
238         else
239         {
240             double temp = Konstanten.HUNDRED_PERCENT * Common.divide(lagerbestand - abgesetzteMenge * 0.1, abgesetzteMenge);
241             ergebnis = (Math.max(0.0, temp));
242         }
243 
244         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
245         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
246 
247         return rueckgabewert;
248     }
249 
250     /***
251      * Liefert den optimalen Zinssatz zur&uuml;ck
252      * Zinssatz Optimal
253      *
254      * @param	zuvielbezahlteZinsen	Die zuviel bezahlten Zinsen
255      * @param	bankkreditVorquartal	Die H&ouml;he des Bankkredits im Vorquartal
256      * @param	kontokorrentkreditVorquartal	Die H&ouml;he des Kontokorrentkredits im Vorquartal
257      * @param	optimaleAenderungBankkredit	Die optimale &Auml;nderung des Bankkredits
258      * @param	optimaleAenderungKontokorrentkredit	Die optimale &Auml;nderung des Kontokorrentkredits
259      * @return	Der optimale Zinssatz
260      */
261     public static final double zinssatzOptimal(final double zuvielbezahlteZinsen, final double bankkreditVorquartal, final double kontokorrentkreditVorquartal, final double optimaleAenderungBankkredit, final double optimaleAenderungKontokorrentkredit)
262     {
263         double ergebnis = 0.0;
264 
265         if ((bankkreditVorquartal + optimaleAenderungBankkredit + kontokorrentkreditVorquartal + optimaleAenderungKontokorrentkredit) > 0)
266             ergebnis = ((zuvielbezahlteZinsen / (bankkreditVorquartal + optimaleAenderungBankkredit + kontokorrentkreditVorquartal + optimaleAenderungKontokorrentkredit)) * Konstanten.HUNDRED_PERCENT);
267         else
268             ergebnis = 0.0;
269 
270         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
271         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
272 
273         return rueckgabewert;
274     }
275 
276     /***
277      * Liefert die Liquiditaets&auml;nderung bei eintreffen des geplanten Absatzes zur&uuml;ck
278      *
279      * @param	erfolgVorSteuern	Der Erfolg vor Steuern
280      * @param	tatsaechlicheLiquiditaetsaenderung	Die tats&auml;chliche Liquiditaets&auml;nderung
281      * @param	absatzReal	Der reale Absatz
282      * @param	absatzGeplant	Der geplante Absatz
283      * @param	nominellerPreis	Der nominelle Preis
284      * @param	lagerkostenProStueck	Die Lagerkosten pro Fertigprodukt
285      * @param	lohnkostenMitErhoehung	Die Lohnkosten inklusive Erh&ouml;hung
286      * @param	rohstoffkosten	Die Rohstoffkosten
287      * @return	Die Liquiditaets&auml;nderung bei eintreffen des geplanten Absatzes
288      */
289     public static final double liquiditaetsaenderungBeiGeplantemAbsatz(final double erfolgVorSteuern, final double tatsaechlicheLiquiditaetsaenderung, final double absatzReal, final double absatzGeplant, final double nominellerPreis, final double lagerkostenProStueck, final double lohnkostenMitErhoehung, final double rohstoffkosten)
290     {
291         double ergebnis = 0.0;
292 
293         double liquiditaetsaenderung = 0.0;
294 
295         if (erfolgVorSteuern <= 0)
296         {
297             liquiditaetsaenderung = tatsaechlicheLiquiditaetsaenderung - ((absatzReal - absatzGeplant) * (nominellerPreis + lagerkostenProStueck));
298         }
299         else if (erfolgVorSteuern > 0)
300         {
301             liquiditaetsaenderung = tatsaechlicheLiquiditaetsaenderung - ((absatzReal - absatzGeplant) * ((nominellerPreis + lagerkostenProStueck) - (nominellerPreis - (lohnkostenMitErhoehung - rohstoffkosten + lagerkostenProStueck) * (1.0 - 0.45))));
302         }
303 
304         ergebnis = liquiditaetsaenderung;
305 
306         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
307         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
308 
309         return rueckgabewert;
310     }
311 
312     /***
313      * Liefert den Fehleranteil zur&uuml;ck
314      *
315      * @param	qualitaetssicherungNominal	Die nominalen QSAufwendungen gem&auml;฿ Unternehmensentscheidung
316      * @param	qualitaetssicherungTabelle	Die ArrayList Tabelle mit den Zuordnungen QSAufwendungen - Fehlerrate - Ausschussrate
317      * @return	Der Fehleranteil
318      */
319     public static final double fehleranteil(final double qualitaetssicherungNominal, final ArrayList qualitaetssicherungTabelle)
320     {
321         double ergebnis = 0.0;
322 
323         double differenz = 0.0;
324         double intervall = 0.0;
325         double intervall2 = 0.0;
326 
327         int groesseQualitaetssicherungTabelle = qualitaetssicherungTabelle.size();
328 
329         if (qualitaetssicherungNominal <= ((Qualitaetssicherung) qualitaetssicherungTabelle.get(0)).getQualitaetssicherungsausgaben())
330             ergebnis = ((Qualitaetssicherung) qualitaetssicherungTabelle.get(0)).getFehlerrate();
331         else if (qualitaetssicherungNominal >= ((Qualitaetssicherung) qualitaetssicherungTabelle.get(groesseQualitaetssicherungTabelle - 1)).getQualitaetssicherungsausgaben())
332             ergebnis = ((Qualitaetssicherung) qualitaetssicherungTabelle.get(groesseQualitaetssicherungTabelle - 1)).getFehlerrate();
333 
334         for (int i = 0; i < groesseQualitaetssicherungTabelle - 1; i++)
335         {
336             // suche das entsprechende Intervall
337             if ((((Qualitaetssicherung) qualitaetssicherungTabelle.get(i + 1)).getQualitaetssicherungsausgaben() > qualitaetssicherungNominal) && (qualitaetssicherungNominal >= ((Qualitaetssicherung) qualitaetssicherungTabelle.get(i)).getQualitaetssicherungsausgaben()))
338             {
339                 differenz = (qualitaetssicherungNominal - ((Qualitaetssicherung) qualitaetssicherungTabelle.get(i + 1)).getQualitaetssicherungsausgaben());
340                 intervall = (((Qualitaetssicherung) qualitaetssicherungTabelle.get(i)).getQualitaetssicherungsausgaben() - ((Qualitaetssicherung) qualitaetssicherungTabelle.get(i + 1)).getQualitaetssicherungsausgaben());
341                 intervall2 = (((Qualitaetssicherung) qualitaetssicherungTabelle.get(i + 1)).getFehlerrate() - ((Qualitaetssicherung) qualitaetssicherungTabelle.get(i)).getFehlerrate());
342 
343                 // Interpolation
344                 ergebnis = ((Qualitaetssicherung) qualitaetssicherungTabelle.get(i + 1)).getFehlerrate() - (intervall2 * (differenz / intervall));
345             }
346         }
347 
348         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
349         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
350 
351         return rueckgabewert;
352     }
353 
354     /***
355      * Liefert die Abschreibungskosten zur&uuml;ck
356      * Tabelle 21 (29)
357      *
358      * @param	anlagevermoegenVorquartal	Die H&ouml;he des Anlageverm&ouml;gens im Vorquartal
359      * @param	wertberichtigung	Die H&ouml;he der Wertberichtigung
360      * @return	Die Abschreibungskosten
361      */
362     public static final double abschreibungskosten(final double anlagevermoegenVorquartal, final double wertberichtigung)
363     {
364         double ergebnis = (anlagevermoegenVorquartal * wertberichtigung);
365 
366         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
367         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
368 
369         return rueckgabewert;
370     }
371 
372     /***
373      * Liefert die Anlagenprojektierungskosten zur&uuml;ck
374      * Beschaffung und Produktion Tabelle 21 Zeile 31 => Anlagenprojektierung == 0.04
375      *
376      * @param	investition	Die Investitionen
377      * @param	anlagenprojektierung	Der Anlagenprojektierungskostensatz (Prozent)
378      * @return	Die Anlagenprojektierungskosten
379      */
380     public static final double anlagenProjektierungsKosten(final double investition, final double anlagenprojektierung)
381     {
382         double ergebnis = (investition * anlagenprojektierung);
383 
384         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
385         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
386 
387         return rueckgabewert;
388     }
389 
390     /***
391      * Liefert die Rohstoff-Verbrauchskosten zur&uuml;ck
392      * Beschaffung und Produktion Tabelle 21 Zeile 32
393      *
394      * @param	nominalProduktionsmenge	Die nominale Produktionsmenge
395      * @param	rohstoffVerbrauchProFertigprodukt	Der Rohstoffverbrauch pro Fertigprodukt
396      * @param	rohstoffPreisVorquartal	Der Rohstoffpreis im Vorquartal
397      * @return	Die Rohstoff-Verbrauchskosten
398      */
399     public static final double rohstoffVerbrauchsKosten(final double nominalProduktionsmenge, final double rohstoffVerbrauchProFertigprodukt, final double rohstoffPreisVorquartal)
400     {
401         double ergebnis = (nominalProduktionsmenge * rohstoffVerbrauchProFertigprodukt * rohstoffPreisVorquartal);
402 
403         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
404         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
405 
406         return rueckgabewert;
407     }
408 
409     /***
410      * Liefert die Rohstofflagerkosten zur&uuml;ck
411      * Beschaffung und Produktion Tabelle 21 Zeile 34
412      *
413      * @param	rohstoffLagerBestandStueck	Der Rohstofflagerbestand in St&uuml;ck
414      * @param	rohstoffLagerKostenProStueck
415      * @return	Die Rohstofflagerkosten
416      */
417     public static final double rohstoffLagerKosten(final double rohstoffLagerBestandStueck, final double rohstoffLagerKostenProStueck)
418     {
419         double ergebnis = (rohstoffLagerBestandStueck * rohstoffLagerKostenProStueck);
420 
421         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
422         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
423 
424         return rueckgabewert;
425     }
426 
427     /***
428      * Liefert die Rohstoff-Bestellungskosten zur&uuml;ck
429      * Tabelle 21 (33)
430      *
431      * @param	normalBestellungskosten	Die Bestellkosten f&uuml;r die normale Rohstoffbestellung
432      * @param	expressBestellungskosten	Die Bestellkosten f&uuml;r die express Rohstoffbestellung
433      * @param	inflationsindex	Der Inflationsindex
434      * @return	Die Rohstoff-Bestellungskosten
435      */
436     public static final double rohstoffBestellungskosten(final double normalBestellungskosten, final double expressBestellungskosten, final double inflationsindex)
437     {
438         double ergebnis = ((normalBestellungskosten + expressBestellungskosten) * inflationsindex);
439 
440         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
441         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
442 
443         return rueckgabewert;
444     }
445 
446     /***
447      * Liefert die Fertigungszeit pro gutes St&uuml;ck zur&uuml;ck
448      * Tabelle 20 (331)  => Fertigungszeit in Minuten pro "gutes" St&uuml;ck
449      *
450      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
451      * @param	nachbearbeiteteProduktionsmenge	Die nachbearbeitete Produktionsmenge
452      * @param	guteProduktionsmenge	Die gute Produktionsmenge
453      * @param	nominaleFertigungsZeit	Die nominale Fertigungszeit
454      * @param	nacharbeitsAufwand	Der Nacharbeitsaufwand (Prozent)
455      * @return	Die Fertigungszeit pro gutes St&uuml;ck
456      */
457     public static final double fertigungsZeitGutesStueck(final double nominaleProduktionsmenge, final double nachbearbeiteteProduktionsmenge, final double guteProduktionsmenge, final double nominaleFertigungsZeit, final double nacharbeitsAufwand)
458     {
459         double ergebnis = 0.0;
460 
461         if (guteProduktionsmenge > 0)
462             ergebnis = (((nominaleProduktionsmenge * nominaleFertigungsZeit) + (nachbearbeiteteProduktionsmenge * nominaleFertigungsZeit * nacharbeitsAufwand)) / guteProduktionsmenge);
463         else
464             ergebnis = (((nominaleProduktionsmenge * nominaleFertigungsZeit) + (nachbearbeiteteProduktionsmenge * nominaleFertigungsZeit * nacharbeitsAufwand)));
465 
466         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
467         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
468 
469         return rueckgabewert;
470     }
471 
472     /***
473      * Liefert die gesamte Fertigungszeit zur&uuml;ck
474      * Fertigungszeit in Stunden insgesamt
475      *
476      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
477      * @param	nachbearbeiteteProduktionsmenge	Die nachbearbeitete Produktionsmenge
478      * @param	nominaleFertigungsZeit	Die nominale Fertigungszeit
479      * @param	nacharbeitsAufwand	Der Nacharbeitsaufwand (Prozent)
480      * @return	Die gesamte Fertigungszeit
481      */
482     public static final double fertigungszeitGesamt(final double nominaleProduktionsmenge, final double nachbearbeiteteProduktionsmenge, final double nominaleFertigungsZeit, final double nacharbeitsAufwand)
483     {
484         double ergebnis = (((nominaleProduktionsmenge * nominaleFertigungsZeit) + (nachbearbeiteteProduktionsmenge * nominaleFertigungsZeit * nacharbeitsAufwand)) / 60.0);
485 
486         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
487         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
488 
489         return rueckgabewert;
490     }
491 
492     /***
493      * Liefert die Kapazit&auml;tsauslastung zur&uuml;ck
494      * Tabelle 20 (332)  => R&uuml;ckgabe in Prozent ; Berechnung des 2. &uuml;bergabeparameter erfolgt im Vorquartal f&uuml;r das aktuelle
495      *
496      * @param	fertigungszeitGesamt	Die gesamte Fertigungszeit
497      * @param	kapazitaetsbestandVorquartal	Der Kapazit&auml;tsbestand in Stunden
498      * @return	Die Kapazit&auml;tsauslastung
499      */
500     public static final double kapazitaetsauslastung(final double fertigungszeitGesamt, final double kapazitaetsbestandVorquartal)
501     {
502         double ergebnis = 0.0;
503 
504         if (kapazitaetsbestandVorquartal > 0)
505             ergebnis = ((double) fertigungszeitGesamt / (double) kapazitaetsbestandVorquartal);
506         else
507             ergebnis = ((double) fertigungszeitGesamt);
508 
509         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
510         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
511 
512         return rueckgabewert;
513     }
514 
515     /***
516      * Liefert den Kapazit&auml;tsbestand im Folgequartal zur&uuml;ck
517      * Tabelle 20 (333)
518      *
519      * @param	kapazitaetsbestand	Der Kapazit&auml;tsbestand dieses Quartal
520      * @param	investitionen	Die investitionen
521      * @param	abschreibungskosten	Die Abschreibungskosten
522      * @param	spezifischeInvestionsausgaben	Die spezifischen Investitionsausgaben
523      * @return	Der Kapazit&auml;tsbestand im Folgequartal
524      */
525     public static final double kapazitaetsbestandFolgequartal(final double kapazitaetsbestand, final double investitionen, final double abschreibungskosten, final double spezifischeInvestionsausgaben)
526     {
527         double ergebnis = 0.0;
528 
529         if (spezifischeInvestionsausgaben > 0)
530             ergebnis = (kapazitaetsbestand + ((investitionen + abschreibungskosten) / spezifischeInvestionsausgaben));
531         else
532             ergebnis = (kapazitaetsbestand + (investitionen + abschreibungskosten));
533 
534         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
535         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
536 
537         return rueckgabewert;
538     }
539 
540     /***
541      * Liefert die Ausschusskosten zur&uuml;ck
542      * Wird f&uuml;r die Qualit&auml;tskosten ben&ouml;tigt
543      *
544      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
545      * @param	ausschuss	Die Ausschussquote
546      * @param	fertigungsstueckzeit	Die Fertigungszeit pro St&uuml;ck
547      * @param	lohnkosten	Die Lohnkosten pro St&uuml;ck
548      * @param	lohnindex	Der Lohnerh&ouml;hungsindex
549      * @param	rohstoffverbrauch	Der Rohstoffverbrauch pro St&uuml;ck
550      * @param	rohstoffwert	Der Rohstoffwert
551      * @param	kapazitaetsauslastung	Die Kapazit&auml;tsauslastung
552      * @return	Die Ausschusskosten
553      */
554     public static final double ausschusskosten(final double nominaleProduktionsmenge, final double ausschuss, final double fertigungsstueckzeit, final double lohnkosten, final double lohnindex, final double rohstoffverbrauch, final double rohstoffwert, final double kapazitaetsauslastung)
555     {
556         double ergebnis = 0.0;
557 
558         double sektor = 0.0;
559         double rest = 0.0;
560 
561         if (kapazitaetsauslastung < 100)
562         {
563             ergebnis = ((nominaleProduktionsmenge * ausschuss) * ((fertigungsstueckzeit / 60.0 * lohnkosten * lohnindex) + rohstoffverbrauch * rohstoffwert));
564         }
565         else
566         {
567             sektor = kapazitaetsauslastung / 50.0;
568             rest = sektor % 1;
569             sektor = sektor - rest;
570 
571             if (sektor % 2 != 0)
572                 ergebnis = ((nominaleProduktionsmenge * ausschuss) * ((fertigungsstueckzeit / 60 * lohnkosten * lohnindex) + rohstoffverbrauch * rohstoffwert));
573             else if (sektor % 2 == 0)
574                 ergebnis = ((nominaleProduktionsmenge * ausschuss) * ((fertigungsstueckzeit / 60 * lohnkosten * lohnindex * 1.5) + rohstoffverbrauch * rohstoffwert));
575         }
576 
577         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
578         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
579 
580         return rueckgabewert;
581     }
582 
583     /***
584      * Liefert den Fehlerkosten zur&uuml;ck
585      * Wird f&uuml;r die Qualit&auml;tskosten ben&ouml;tigt
586      *
587      * @param	ausschusskosten	Die Ausschusskosten
588      * @param	nacharbeitslohnkosten	Die Nacharbeitslohnkosten
589      * @return	Die Fehlerkosten
590      */
591     public static final double fehlerkosten(final double ausschusskosten, final double nacharbeitslohnkosten)
592     {
593         double ergebnis = (ausschusskosten + nacharbeitslohnkosten);
594 
595         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
596         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
597 
598         return rueckgabewert;
599     }
600 
601     /***
602      * Liefert die Qualit&auml;tskosten zur&uuml;ck
603      * Tabelle 20 (341)
604      *
605      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
606      * @param	inflationsindex	Der Inflationsindex
607      * @param	qualitaetssicherungProStueckReal	Die reale Qualit&auml;tsssicherung pro St&uuml;ck
608      * @param	fehlerkosten	Die Fehlerkosten
609      * @return	Die Qualit&auml;tskosten
610      */
611     public static final double qualitaetskosten(final double nominaleProduktionsmenge, final double inflationsindex, final double qualitaetssicherungProStueckReal, final double fehlerkosten)
612     {
613         double ergebnis = ((nominaleProduktionsmenge * (qualitaetssicherungProStueckReal * inflationsindex)) + fehlerkosten);
614 
615         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
616         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
617 
618         return rueckgabewert;
619     }
620 
621     /***
622      * Liefert die Nacharbeits-Lohnkosten zur&uuml;ck
623      * Tabelle 20 (342)
624      *
625      * @param	fertigungszeit	Die Fertigungszeit pro St&uuml;ck
626      * @param	stundenlohn	Der Stundelohn
627      * @param	ueberstundenZuschlag	Der &Uuml;berstundenzuschlag
628      * @param	nacharbeitsAufwand	Der Nacharbeitsaufwand
629      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
630      * @param	fehleranteil	Der Fehleranteil
631      * @return	Die Nacharbeits-Lohnkosten
632      */
633     public static final double nacharbeitskosten(final double fertigungszeit, final double stundenlohn, final double ueberstundenZuschlag, final double nacharbeitsAufwand, final double nominaleProduktionsmenge, final double fehleranteil)
634     {
635         double ergebnis = 0.0;
636 
637         double stuecklohn = 0.0;
638         double stuecklohnueberstunde = 0.0;
639         double nacharbeitskosten = 0.0;
640 
641         stuecklohn = (fertigungszeit / 60.0) * stundenlohn;
642         stuecklohnueberstunde = stuecklohn * ueberstundenZuschlag;
643         nacharbeitskosten = (stuecklohn + stuecklohnueberstunde) * nacharbeitsAufwand;
644 
645         ergebnis = ((nominaleProduktionsmenge * fehleranteil * nacharbeitskosten * 0.75));
646 
647         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
648         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
649 
650         return rueckgabewert;
651     }
652 
653     /***
654      * Liefert die Ausschussquote (25% von der Fehlerrate) zur&uuml;ck
655      * Ausschuss in Prozent
656      *
657      * @param	fehleranteil	Der Fehleranteil
658      * @return	Die Ausschussquote
659      */
660     public static final double ausschuss(final double fehleranteil)
661     {
662         double ergebnis = (fehleranteil * 0.25);
663 
664         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
665         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
666 
667         return rueckgabewert;
668     }
669 
670     /***
671      * Liefert die reale Qualt&auml;tssicherung zur&uuml;ck
672      * Tabelle A1.1 Zeile 2.33 und Tabelle A1.2 Zeile 3.4
673      *
674      * @param	qualitaetskostenNominalProStueck	Qualt&auml;tskosten pro nominal produziertes St&uuml;ck
675      * @param	inflationsindex	Der Inflationsindex
676      * @return	Die reale Qualt&auml;tssicherung
677      */
678     public static final double qualtaetssicherungReal(final double qualitaetskostenNominalProStueck, final double inflationsindex)
679     {
680         double ergebnis = 0.0;
681 
682         if (inflationsindex > 0)
683             ergebnis = (qualitaetskostenNominalProStueck / inflationsindex);
684         else
685             ergebnis = 0.0;
686 
687         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
688         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
689 
690         return rueckgabewert;
691     }
692 
693     /***
694      * Liefert die nominale Produktionsmenge zur&uuml;ck
695      * Tabelle 20 (311)
696      *
697      * @param	guteProduktionsmenge	Die gute Produktionsmenge
698      * @param	ausschuss	Die Ausschussquote
699      * @return	Die nominale Produktionsmenge
700      */
701     public static final double produktionsmengeNominal(final double guteProduktionsmenge, final double ausschuss)
702     {
703         double ausschussTemp = ausschuss / Konstanten.HUNDRED_PERCENT;
704 
705         double ergebnis = (guteProduktionsmenge / (1 - ausschussTemp));
706 
707         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
708         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
709 
710         return rueckgabewert;
711     }
712 
713     /***
714      * Liefert die nacharbeitbare Produktionsmenge zur&uuml;ck
715      * Tabelle 20 (313)
716      *
717      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
718      * @param	fehleranteil	Der Fehleranteil
719      * @return	Die nacharbeitbare Produktionsmenge
720      */
721     public static final double produktionsmengeNacharbeitbar(final double nominaleProduktionsmenge, final double fehleranteil)
722     {
723         double fehleranteilTemp = fehleranteil / Konstanten.HUNDRED_PERCENT;
724 
725         double ergebnis = (nominaleProduktionsmenge * fehleranteilTemp * 0.75);
726 
727         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
728         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
729 
730         return rueckgabewert;
731     }
732 
733     /***
734      * Liefert die Ausschuss-Produktionsmenge zur&uuml;ck
735      *
736      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
737      * @param	ausschuss	Der Ausschussanteil
738      * @return	Die Ausschuss-Produktionsmenge
739      */
740     public static final double produktionsmengeAusschuss(final double nominaleProduktionsmenge, final double ausschuss)
741     {
742         double ausschussTemp = ausschuss / Konstanten.HUNDRED_PERCENT;
743 
744         double ergebnis = (nominaleProduktionsmenge * ausschussTemp);
745 
746         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
747         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
748 
749         return rueckgabewert;
750     }
751 
752     /***
753      * Liefert die fehlerhafte Produktionsmenge zur&uuml;ck
754      * Tabelle 20 Z.:312
755      *
756      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
757      * @param	fehleranteil	Der Fehleranteil
758      * @return	Die fehlerhafte Produktionsmenge
759      */
760     public static final double produktionsmengeFehlerhaft(final double nominaleProduktionsmenge, final double fehleranteil)
761     {
762         double fehleranteilTemp = fehleranteil / Konstanten.HUNDRED_PERCENT;
763 
764         double ergebnis = (nominaleProduktionsmenge * fehleranteilTemp);
765 
766         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
767         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
768 
769         return rueckgabewert;
770     }
771 
772     /***
773      * Liefert die Aufarbeitungskosten zur&uuml;ck
774      * Tabelle21 Zeile 24
775      *
776      * @param	lagerbestandFertigprodukteVorquartal	Der Lagerbestand an Fertigprodukten im Vorquartal
777      * @param	produktartaenderungInStufen	Die Produktart&auml;nderung in Stufen
778      * @return	Die Aufarbeitungskosten
779      */
780     public static final double aufarbeitungskosten(final double lagerbestandFertigprodukteVorquartal, final int produktartaenderungInStufen)
781     {
782         double ergebnis = (lagerbestandFertigprodukteVorquartal * produktartaenderungInStufen * 0.75);
783 
784         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
785         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
786 
787         return rueckgabewert;
788     }
789 
790     /***
791      * Liefert die gesamten Qualit&auml;tssicherungsaufwendungen zur&uuml;ck
792      * Tabelle: 21 Z.: 25
793      * qualitaetssicherungskostenNominalProStueck aus dem Entscheidungsblatt
794      *
795      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
796      * @param	qualitaetssicherungskostenNominalProStueck	Die nominale pro St&uuml;ck aufgewendeten Qualit&auml;tssicherungskosten
797      * @return	Die gesamten Qualit&auml;tssicherungsaufwendungen
798      */
799     public static final double qualitaetssicherungGesamt(final double nominaleProduktionsmenge, final double qualitaetssicherungskostenNominalProStueck)
800     {
801         double ergebnis = (nominaleProduktionsmenge * qualitaetssicherungskostenNominalProStueck);
802 
803         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
804         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
805 
806         return rueckgabewert;
807     }
808 
809     /***
810      * Liefert die Fertigungs-Lohnkosten zur&uuml;ck
811      * Tabelle 20 (26)
812      *
813      * @param	nominaleProduktionsmenge	Die nominale Produktionsmenge
814      * @param	fertigungszeitNominal	Die nominale Fertigungszeit pro St&uuml;ck
815      * @param	lohnkostenMitErhoehung	Die Lohnkosten mit Erh&ouml;hung
816      * @param	nacharbeitsAufwand	Der Nacharbeitsaufwand
817      * @param	fehleranteil	Der Fehleranteil
818      * @return     Die Fertigungs-Lohnkosten
819      */
820     public static final double fertigungsLohnKosten(final double nominaleProduktionsmenge, final double fertigungszeitNominal, final double lohnkostenMitErhoehung, final double nacharbeitsAufwand, final double fehleranteil)
821     {
822         double ergebnis = (nominaleProduktionsmenge * (fertigungszeitNominal / 60) * lohnkostenMitErhoehung * (1.0 + fehleranteil * 0.75 * nacharbeitsAufwand));
823 
824         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
825         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
826 
827         return rueckgabewert;
828     }
829 
830     /***
831      * Liefert die &Uuml;berstundenzuschl&auml;ge zur&uuml;ck
832      * Tabelle 20 (27)
833      *
834      * @param	kapazitaetsauslastung    Die Kapazit&auml;tsauslastung
835      * @param	fertigungszeitGesamt  Die gesamte Fertigungszeit
836      * @param	kapazitaetsbestandFolgeQuartalVorquartal Der Kapazit&auml;tsbestand im Folgequartal
837      * @param	lohnkostenMitErhoehung   Lohnkosten mit Erh&ouml;hung
838      * @return	Die &Uuml;berstundenzuschl&auml;ge
839      */
840     public static final double ueberstundenzuschlaege(final double kapazitaetsauslastung, final double fertigungszeitGesamt, final double kapazitaetsbestandFolgeQuartalVorquartal, final double lohnkostenMitErhoehung)
841     {
842         double ergebnis = 0.0;
843         /***@TODO An nach oben offene Verh&auml;ltnisse anpassen*/
844 
845         if (((kapazitaetsauslastung / Konstanten.HUNDRED_PERCENT) > 1.0) && ((kapazitaetsauslastung / Konstanten.HUNDRED_PERCENT) <= 1.5))
846         {
847             ergebnis = ((fertigungszeitGesamt - (kapazitaetsbestandFolgeQuartalVorquartal * 1.0)) * lohnkostenMitErhoehung * 0.5);
848         }
849         else if (((kapazitaetsauslastung / Konstanten.HUNDRED_PERCENT) > 2.0) && ((kapazitaetsauslastung / Konstanten.HUNDRED_PERCENT) <= 2.5))
850         {
851             ergebnis = ((fertigungszeitGesamt - (kapazitaetsbestandFolgeQuartalVorquartal * 2.0)) * lohnkostenMitErhoehung * 0.5);
852         }
853         else
854         {
855             ergebnis = 0.0;
856         }
857 
858         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
859         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
860 
861         return rueckgabewert;
862     }
863 
864     /***
865      * Liefert die Lohnrate zur&uuml;ck
866      * Lohnrate in Prozent
867      *
868      * @param	lohnindexVorquartal  Der Lohnerh&ouml;hungsindex im Vorquartal
869      * @param	lohnrate Die Lohnerh&ouml;hungsrate
870      * @return	Die Lohnrate
871      */
872     public static final double lohnindex(final double lohnindexVorquartal, final double lohnrate)
873     {
874         double lohnindexVorquartalTemp = lohnindexVorquartal / Konstanten.HUNDRED_PERCENT;
875         double lohnrateTemp = lohnrate / Konstanten.HUNDRED_PERCENT;
876 
877         double ergebnis = (lohnindexVorquartalTemp * (1.0 + lohnrateTemp)) * Konstanten.HUNDRED_PERCENT; // in Prozent
878 
879         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
880         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
881 
882         return rueckgabewert;
883     }
884 
885     /***
886      * Liefert die nominalen Lohnkosten zur&uuml;ck
887      *
888      * @param	lohnkosten   Die Lohnkosten
889      * @param	lohnindex    Der Lohnerh&ouml;hungsindex
890      * @return	Die nominalen Lohnkosten
891      */
892     public static final double lohnkostenNominal(final double lohnkosten, final double lohnindex)
893     {
894         double ergebnis = (lohnkosten * lohnindex);
895 
896         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
897         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
898 
899         return rueckgabewert;
900     }
901 
902     /***
903      * Liefert die Verwaltungskosten zur&uuml;ck
904      * Tabelle: 21 Zeile 41
905      *
906      * @param	kapazitaetsauslastung    Die Kapazit&auml;tsauslastung
907      * @param	lohnindex    Der Lohnerh&ouml;hungsindex
908      * @param	verwaltungTabelle    Die Tabelle ArrayList mit den Zuordnungen Verwaltungskosten / Schicht
909      * @return	Die Verwaltungskosten
910      */
911     public static final double verwaltung(final double kapazitaetsauslastung, final double lohnindex, final ArrayList verwaltungTabelle)
912     {
913         double ergebnis = 0.0;
914 
915         int groesseVerwaltungTabelle = verwaltungTabelle.size();
916 
917         for (int i = 0; i < groesseVerwaltungTabelle - 1; i++)
918         {
919             if (kapazitaetsauslastung >= ((Verwaltungskosten) verwaltungTabelle.get(i)).getKapazitaetsauslastung() && kapazitaetsauslastung < ((Verwaltungskosten) verwaltungTabelle.get(i + 1)).getKapazitaetsauslastung())
920             {
921                 ergebnis = ((Verwaltungskosten) verwaltungTabelle.get(i + 1)).getKosten() * lohnindex;
922                 break;
923             }
924             else if (kapazitaetsauslastung < ((Verwaltungskosten) verwaltungTabelle.get(i)).getKapazitaetsauslastung())
925             {
926                 ergebnis = ((Verwaltungskosten) verwaltungTabelle.get(i)).getKosten() * lohnindex;
927                 break;
928             }
929         }
930 
931         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
932         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
933 
934         return rueckgabewert;
935     }
936 
937     /***
938      * Liefert die Schichtwechsel-Kosten zur&uuml;ck
939      * Tabelle 21 Zeile 28
940      *
941      *
942      * @param	schichtwechselKosten Die Basis-Schichtwechselkosten
943      * @param	kapazitaetsauslastungVorquartal    Die Kapazit&auml;tsauslastung im Vorquartal
944      * @param	kapazitaetsauslastung    Die Kapazit&auml;tsauslastung
945      * @param	lohnindex    Der Lohnerh&ouml;hungsindex
946      * @return	Die Schichtwechsel-Kosten
947      */
948     public static final double schichtwechsel(final double schichtwechselKosten, final double kapazitaetsauslastungVorquartal, final double kapazitaetsauslastung, final double lohnindex)
949     {
950         double ergebnis = 0.0;
951 
952         double wechsel = 0.0;
953         double schichtAlt = 0.0;
954         double schichtNeu = 0.0;
955         double temp = 0.0;
956 
957         schichtAlt = schicht(kapazitaetsauslastungVorquartal);
958         schichtNeu = schicht(kapazitaetsauslastung);
959 
960         temp = schichtAlt - schichtNeu;
961 
962         wechsel = Math.abs(temp);
963 
964         ergebnis = (wechsel * schichtwechselKosten * lohnindex);
965 
966         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
967         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
968 
969         return rueckgabewert;
970     }
971 
972     /***
973      * Liefert die aktuelle Schicht ausgehend von der Kapazit&auml;tsauslastung zur&uuml;ck
974      *
975      * @param	kapazitaetsauslastung    Die Kapazit&auml;tsauslastung
976      * @return	Die aktuelle Schicht
977      */
978     public static final double schicht(final double kapazitaetsauslastung)
979     {
980         double ergebnis = 0.0;
981 
982         double sektor = 0.0;
983 
984         sektor = kapazitaetsauslastung / 50.0;
985         ergebnis = Math.floor((sektor - 1.0) / 2.0);
986 
987         if (ergebnis < 1.0)
988             ergebnis = 1.0;
989         else
990             ergebnis += 1.0;
991 
992         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
993         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
994 
995         return rueckgabewert;
996     }
997 
998     /***
999      * Liefert den Rohstoffverbrauch zur&uuml;ck
1000      * Tabelle: 20 Zeile 42
1001      *
1002      * @param	nominaleProduktionsmenge Die nominale Produktionsmenge
1003      * @param	rohstoffverbrauchProStueck   Der Rohstoffverbrauch pro St&uuml;ck
1004      * @return	Der Rohstoffverbrauch
1005      */
1006     public static final double rohstoffverbrauch(final double nominaleProduktionsmenge, final double rohstoffverbrauchProStueck)
1007     {
1008         double ergebnis = (nominaleProduktionsmenge * rohstoffverbrauchProStueck);
1009 
1010         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1011         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1012 
1013         return rueckgabewert;
1014     }
1015 
1016     /***
1017      * Liefert den Rohstofflagerbestand zur&uuml;ck
1018      * Tabelle: 20 Zeile 43
1019      *
1020      * @param  rohstoffLagerBestandVorquartal   Der Rohstofflagerbestand im Vorquartal
1021      * @param  rohstoffverbrauch    Der Rohstoffverbrauch
1022      * @param  rohstoffBestellmenge Die Rohstoff-Bestellmenge
1023      * @return Der Rohstofflagerbestand
1024      */
1025     public static final double rohstoffLagerBestand(final double rohstoffLagerBestandVorquartal, final double rohstoffverbrauch, final double rohstoffBestellmenge)
1026     {
1027         double ergebnis = (rohstoffLagerBestandVorquartal - rohstoffverbrauch + rohstoffBestellmenge);
1028 
1029         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1030         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1031 
1032         return rueckgabewert;
1033     }
1034 
1035     /***
1036      * Liefert den Rohstoffpreis zur&uuml;ck
1037      *
1038      * @param	rohstoffpreisEndeVorquartal   Der Rohstoffpreis im Vorquartal
1039      * @param	inflationsindex   Der Inflationsindex
1040      * @return  Der Rohstoffpreis
1041      */
1042     public static final double rohstoffpreis(final double rohstoffpreisEndeVorquartal, final double inflationsindex)
1043     {
1044         double ergebnis = (rohstoffpreisEndeVorquartal * inflationsindex);
1045 
1046         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1047         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1048 
1049         return rueckgabewert;
1050     }
1051 
1052     /***
1053      * Liefert den Rohstoffwert zur&uuml;ck
1054      * Tabelle: 20 Zeile 44
1055      *
1056      * @param	rohstoffBestellmenge  Die Rohstoffbestellmenge
1057      * @param	rohstoffLagerVorquartal   Die Rohstofflagermenge im Vorquartal
1058      * @param	rohstoffverbrauch Der Rohstoffverbrauch
1059      * @param	rohstoffwertEndeVorquartal    Der Rohstoffwert am Quartalsende
1060      * @param	rohstoffpreis Der Rohstoffpreis
1061      * @return  Der Rohstoffwert
1062      */
1063     public static final double rohstoffwert(final double rohstoffBestellmenge, final double rohstoffLagerVorquartal, final double rohstoffverbrauch, final double rohstoffwertEndeVorquartal, final double rohstoffpreis)
1064     {
1065         double ergebnis = 0.0;
1066 
1067         if ((rohstoffLagerVorquartal - rohstoffverbrauch) > 0 && (rohstoffBestellmenge + rohstoffLagerVorquartal - rohstoffverbrauch) > 0)
1068             ergebnis = (rohstoffwertEndeVorquartal * (rohstoffLagerVorquartal - rohstoffverbrauch) + rohstoffpreis * rohstoffBestellmenge) / (rohstoffBestellmenge + rohstoffLagerVorquartal - rohstoffverbrauch);
1069         else
1070             ergebnis = (rohstoffpreis);
1071 
1072         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1073         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1074 
1075         return rueckgabewert;
1076     }
1077 
1078     /***
1079      * Liefert die gesamte Fertigungszeit der Fertigungs-Lohnkosten zur&uuml;ck
1080      * f&uuml;r die neue Berechnung der Fertigungslohnkosten relevant
1081      *
1082      * @param	nominaleProduktionsmenge  Die nominale Produktionsmenge
1083      * @param	fertigungsstueckzeit    Die Fertigungszeit pro St&uuml;ck
1084      * @param	produktionsmengeNacharbeit    Die Produktionsmenge in der Nacharbeitszeit
1085      * @return  Die gesamte Fertigungszeit der Fertigungs-Lohnkosten
1086      */
1087     public static final double fertigungszeitGesamtFertigungsLohnKosten(final double nominaleProduktionsmenge, final double fertigungsstueckzeit, final double produktionsmengeNacharbeit)
1088     {
1089         double ergebnis = ((nominaleProduktionsmenge * fertigungsstueckzeit + produktionsmengeNacharbeit * fertigungsstueckzeit * 1.3) / 60.0);
1090 
1091         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1092         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1093 
1094         return rueckgabewert;
1095     }
1096 
1097     /***
1098      * Liefert die normale Kapazit&auml;t zur&uuml;ck
1099      * Unter Ber&uuml;cksichtigung der gesamten Fertigungszeit
1100      * Der Kapazit&auml;tsbestand wird im Vorquartal f&uuml;r das aktuelle berechnet
1101      * dass heisst 2te Schicht => die Normalkapazit&auml;t ist doppelt so hoch wie die Kapazitaetsauslastung bei 100%
1102      * dass heisst 3te Schicht => die Normalkapazit&auml;t ist dreimal so hoch wie die Kapazitaetsauslastung bei 100%
1103      *
1104      * @param	kapazitaetsauslastung    Die Kapazit&auml;tsauslastung
1105      * @param	kapazitaetsbestandVorquartal    Die Kapazit&auml;tsauslastung im Vorquartal
1106      * @return  Die normale Kapazit&auml;t
1107      */
1108     public static final double normalkapazitaet(final double kapazitaetsauslastung, final double kapazitaetsbestandVorquartal)
1109     {
1110         double ergebnis = 0.0;
1111 
1112         double sektor = 0.0;
1113 
1114         sektor = kapazitaetsauslastung / 50.0;
1115         ergebnis = Math.floor((sektor - 1.0) / 2.0);
1116 
1117         if (ergebnis < 1.0)
1118             ergebnis = 1.0;
1119         else
1120             ergebnis += 1.0;
1121 
1122         ergebnis *= kapazitaetsbestandVorquartal;
1123 
1124         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1125         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1126 
1127         return rueckgabewert;
1128     }
1129 
1130     /***
1131      * Liefert die Fertigungszeit ohne &Uuml;berstunden und ohne Nacharbeit zur&uuml;ck
1132      * Fertigungszeit  ohne Nacharbeit und ohne &uuml;berstunden
1133      *
1134      * @param	nominaleProduktionsmenge  Die nominale Produktionsmenge
1135      * @param	fertigungsstueckZeit    Die Fertigungszeit pro St&uuml;ck
1136      * @return  Die Fertigungszeit ohne &Uuml;berstunden und ohne Nacharbeit
1137      */
1138     public static final double fertigungszeitOhneUeberstundenOhneNacharbeit(final double nominaleProduktionsmenge, final double fertigungsstueckZeit)
1139     {
1140         double ergebnis = (nominaleProduktionsmenge * fertigungsstueckZeit / 60.0);
1141 
1142         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1143         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1144 
1145         return rueckgabewert;
1146     }
1147 
1148     /***
1149      * Liefert die Fertigungs-Lohnkosten ohne &Uuml;berstunden und ohne Nacharbeit zur&uuml;ck
1150      * Tabelle 21 Zeile 261
1151      * Fertigungslohnkosten ohne &uuml;berstunden und ohne Nacharbeit
1152      *
1153      * @param	fertigungszeitOhneUeberstundenOhneNacharbeit    Die Fertigungszeit ohne &Uuml;berstunden und ohne Nacharbeit
1154      * @param	lohnkosten    Die Lohnkosten
1155      * @return  Die Fertigungs-Lohnkosten ohne &Uuml;berstunden und ohne Nacharbeit
1156      */
1157     public static final double fertigungsLohnKostenOhneUeberstundenOhneNacharbeit(final double fertigungszeitOhneUeberstundenOhneNacharbeit, final double lohnkosten)
1158     {
1159         double ergebnis = (fertigungszeitOhneUeberstundenOhneNacharbeit * lohnkosten);
1160 
1161         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1162         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1163 
1164         return rueckgabewert;
1165     }
1166 
1167     /***
1168      * Liefert die &Uuml;berstundenzuschl&auml;ge der Fertigungs-Lohnkosten zur&uuml;ck
1169      * Tabelle 21 Zeile 262
1170      * anteilige &uuml;berstundenzuschl&auml;ge f&uuml;r die Fertigungslohnkosten ohne Nacharbeit
1171      * bei den Lohnkosten sind die aufgelaufenen Lohnerh&ouml;hungen / -erniedrigungen zu ber&uuml;cksichtigen
1172      *
1173      * @param	fertigungszeitOhneUeberstundenOhneNacharbeit   Die Fertigungszeit ohne &Uuml;berstunden und ohne Nacharbeit
1174      * @param	normalkapazitaet  Die normale Kapazit&auml;t
1175      * @param	lohnkosten    Die Lohnkosten
1176      * @return  Die &Uuml;berstundenzuschl&auml;ge der Fertigungs-Lohnkosten
1177      */
1178     public static final double ueberstundenzuschlaegeFertigungsLohnKosten(final double fertigungszeitOhneUeberstundenOhneNacharbeit, final double normalkapazitaet, final double lohnkosten)
1179     {
1180         double ergebnis = 0.0;
1181         double sektor = 0.0;
1182 
1183         if (normalkapazitaet > 0)
1184             sektor = (fertigungszeitOhneUeberstundenOhneNacharbeit / (normalkapazitaet / 2.0));
1185         else
1186             sektor = 0.0;
1187 
1188         sektor = Math.ceil((sektor));
1189 
1190         if (sektor < 2.0 || sektor % 2.0 == 0)
1191             ergebnis = 0.0;
1192         else
1193             ergebnis = ((fertigungszeitOhneUeberstundenOhneNacharbeit - (((sektor - 1.0) / 2.0) * normalkapazitaet)) * 0.5 * lohnkosten);
1194 
1195         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1196         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1197 
1198         return rueckgabewert;
1199     }
1200 
1201     /***
1202      * Liefert die Nacharbeitszeit ohne &Uuml;berstunden zur&uuml;ck
1203      * Nacharbeitszeit ohne &uuml;berstunden
1204      * Formel: PM-nom * Fehler[in Prozent] * 0.75 * 1.3(Mehraufwand) * FZ/60
1205      *
1206      * @param	produktionsmengeNacharbeit    Die Produktionsmenge in Nahcarbeit
1207      * @param	fertigungsstueckzeit    Die Fertigungszeit pro St&uuml;ck
1208      * @param	nacharbeitsaufwand    Der Nacharbeitsaufwand
1209      * @return  Die Nacharbeitszeit ohne &Uuml;berstunden
1210      */
1211     public static final double nacharbeitsZeitOhneUeberstunden(final double produktionsmengeNacharbeit, final double fertigungsstueckzeit, final double nacharbeitsaufwand)
1212     {
1213         double ergebnis = (produktionsmengeNacharbeit * (fertigungsstueckzeit / 60.0) * (1.0 + nacharbeitsaufwand));
1214 
1215         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1216         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1217 
1218         return rueckgabewert;
1219     }
1220 
1221     /***
1222      * Liefert die Nacharbeits-Lohnkosten ohne &Uuml;berstunden zur&uuml;ck
1223      * Tabelle 21 Zeile 263
1224      * Nacharbeitslohnkosten ohne &uuml;berstunden
1225      * Formel: PM-nom * Fehler[in Prozent] * 0.75 * 1.3(Mehraufwand) * FZ/60 * LK[10 EURO/h]
1226      * bei den Lohnkosten sind die aufgelaufenen Lohnerh&ouml;hungen / -erniedrigungen zu ber&uuml;cksichtigen
1227      *
1228      * @param	nacharbeitsZeitOhneUeberstunden   Die Nacharbeitszeit ohne &Uuml;berstunden
1229      * @param	lohnkosten    Die Lohnkosten
1230      * @return  Die Nacharbeits-Lohnkosten ohne &Uuml;berstunden
1231      */
1232     public static final double nacharbeitslohnkostenOhneUeberstunden(final double nacharbeitsZeitOhneUeberstunden, final double lohnkosten)
1233     {
1234         double ergebnis = (nacharbeitsZeitOhneUeberstunden * lohnkosten);
1235 
1236         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1237         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1238 
1239         return rueckgabewert;
1240     }
1241 
1242     /***
1243      * Liefert die &Uuml;berstundenzuschl&auml;ge auf die Nacharbeit zur&uuml;ck
1244      * Tabelle 21 Zeile 264
1245      * anteilige &uuml;berstundenzuschl&auml;ge f&uuml;r die Nacharbeit
1246      * 1. Fall: die gesamte Fertigungszeit ist kleiner als die Normalkapazitaet => keine &uuml;berstunden f&uuml;r die Nacharbeit
1247      * 2. Fall: die Fertigungszeit ohne Nacharbeit ist gr&ouml;฿er als die Normalkapazit&auml;t => gesamte Nacharbeit ist in &uuml;berstunden
1248      * 3. Fall: die gesamte Fertigungszeit ist gr&ouml;฿er als die Normalkapazit&auml;t => ein Teil der Nacharbeit ist in &uuml;berstunden
1249      * bei den Lohnkosten sind die aufgelaufenen Lohnerh&ouml;hungen / -erniedrigungen zu ber&uuml;cksichtigen
1250      *
1251      * @param	nacharbeitslohnkostenOhneUeberstunden Die Nacharbeits-Lohnkosten ohne &Uuml;berstunden
1252      * @param	fertigungszeitGesamt    Die gesamte Fertigungszeit
1253      * @param	fertigungszeitOhneUeberstundenOhneNacharbeit   Die Fertigungszeit ohne &Uuml;berstunden und ohne Nacharbeit
1254      * @param	nacharbeitsZeitOhneUeberstunden   Die Nacharbeitszeit ohne &Uuml;berstunden
1255      * @param	normalkapazitaet  Die Normalkapazit&auml;t
1256      * @param	lohnkosten    Die Lohnkosten
1257      * @return  Die &Uuml;berstundenzuschl&auml;ge auf die Nacharbeit
1258      */
1259     public static final double ueberstundenzuschlagNacharbeit(final double nacharbeitslohnkostenOhneUeberstunden, final double fertigungszeitGesamt, final double fertigungszeitOhneUeberstundenOhneNacharbeit, final double nacharbeitsZeitOhneUeberstunden, final double normalkapazitaet, final double lohnkosten)
1260     {
1261         double ergebnis = 0.0;
1262         /***@TODO An nach oben offene Verh&auml;ltnisse anpassen*/
1263 
1264         double temp;
1265 
1266         if (fertigungszeitGesamt <= normalkapazitaet)
1267             return 0;
1268         else if (fertigungszeitGesamt > (1.5 * normalkapazitaet) && fertigungszeitGesamt <= (2 * normalkapazitaet))
1269             return 0;
1270         else if (fertigungszeitGesamt > (2.5 * normalkapazitaet) && fertigungszeitGesamt <= (3 * normalkapazitaet))
1271             return 0;
1272         else if (fertigungszeitGesamt > (3.5 * normalkapazitaet) && fertigungszeitGesamt <= (4 * normalkapazitaet))
1273             return 0;
1274         else if (fertigungszeitGesamt > normalkapazitaet && fertigungszeitGesamt <= (1.5 * normalkapazitaet) && fertigungszeitOhneUeberstundenOhneNacharbeit > normalkapazitaet)
1275             return (nacharbeitslohnkostenOhneUeberstunden / 2);
1276         else if (fertigungszeitGesamt > (2 * normalkapazitaet) && fertigungszeitGesamt <= (2.5 * normalkapazitaet) && fertigungszeitOhneUeberstundenOhneNacharbeit > (2 * normalkapazitaet))
1277             return (nacharbeitslohnkostenOhneUeberstunden / 2);
1278         else if (fertigungszeitGesamt > (3 * normalkapazitaet) && fertigungszeitGesamt <= (3.5 * normalkapazitaet) && fertigungszeitOhneUeberstundenOhneNacharbeit > (3 * normalkapazitaet))
1279             return (nacharbeitslohnkostenOhneUeberstunden / 2);
1280         else if (fertigungszeitGesamt > normalkapazitaet && fertigungszeitGesamt <= (1.5 * normalkapazitaet) && fertigungszeitOhneUeberstundenOhneNacharbeit < normalkapazitaet)
1281         {
1282             temp = (nacharbeitsZeitOhneUeberstunden - (normalkapazitaet - fertigungszeitOhneUeberstundenOhneNacharbeit));
1283             return (temp * lohnkosten / 2);
1284         }
1285         else if (fertigungszeitGesamt > (2 * normalkapazitaet) && fertigungszeitGesamt <= (2.5 * normalkapazitaet) && fertigungszeitOhneUeberstundenOhneNacharbeit < (2 * normalkapazitaet))
1286         {
1287             temp = (nacharbeitsZeitOhneUeberstunden - (normalkapazitaet - fertigungszeitOhneUeberstundenOhneNacharbeit));
1288             return (temp * lohnkosten / 2);
1289         }
1290         else if (fertigungszeitGesamt > (3 * normalkapazitaet) && fertigungszeitGesamt <= (3.5 * normalkapazitaet) && fertigungszeitOhneUeberstundenOhneNacharbeit < (3 * normalkapazitaet))
1291         {
1292             temp = (nacharbeitsZeitOhneUeberstunden - (normalkapazitaet - fertigungszeitOhneUeberstundenOhneNacharbeit));
1293             return (temp * lohnkosten / 2);
1294         }
1295 
1296         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1297         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1298 
1299         return rueckgabewert;
1300     }
1301 
1302     /***
1303      * Liefert die Lohnkosten zur&uuml;ck
1304      * Tabelle 20 Zeile 342
1305      *
1306      * @param	nacharbeitslohnkostenOhneUeberstunden Die Nacharbeits-Lohnkosten ohne &Uuml;berstunden
1307      * @param	ueberstundenzuschlagNacharbeit    Die &Uuml;berstundenzuschl&auml;ge auf die Nacharbeit
1308      * @return  Die Lohnkosten
1309      */
1310     public static final double lohnkosten(final double nacharbeitslohnkostenOhneUeberstunden, final double ueberstundenzuschlagNacharbeit)
1311     {
1312         double ergebnis = (nacharbeitslohnkostenOhneUeberstunden + ueberstundenzuschlagNacharbeit);
1313 
1314         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1315         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1316 
1317         return rueckgabewert;
1318     }
1319 
1320     /***
1321      * Liefert die gesamten Fertigungs-Lohnkosten zur&uuml;ck
1322      *
1323      * @param	ueberstundenzuschlagNacharbeit    Die &Uuml;berstundenzuschl&auml;ge auf die Nacharbeit
1324      * @param	nacharbeitslohnkostenOhneUeberstunden Die Nacharbeits-Lohnkosten ohne &Uuml;berstunden
1325      * @param	fertigungsLohnKostenOhneUeberstundenOhneNacharbeit   Die Fertigungslohnkosten ohne &Uuml;berstunden und ohne Nacharbeit
1326      * @param	ueberstundenzuschlaegeFertigungsLohnKosten   Die &Uuml;berstundenzuschl&auml;ge der Fertigungs-Lohnkosten
1327      * @return  Die gesamten Fertigungs-Lohnkosten
1328      */
1329     public static final double fertigungsLohnKostenGesamt(final double ueberstundenzuschlagNacharbeit, final double nacharbeitslohnkostenOhneUeberstunden, final double fertigungsLohnKostenOhneUeberstundenOhneNacharbeit, final double ueberstundenzuschlaegeFertigungsLohnKosten)
1330     {
1331         double ergebnis = (ueberstundenzuschlagNacharbeit + nacharbeitslohnkostenOhneUeberstunden + fertigungsLohnKostenOhneUeberstundenOhneNacharbeit + ueberstundenzuschlaegeFertigungsLohnKosten);
1332 
1333         // Einfache double Operationen produzieren nicht immer korrekt Ergebnisse - Rundung auf 10 Nachkommastellen
1334         double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1335 
1336         return rueckgabewert;
1337     }
1338 }