1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ü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änglich sein soll, da dies eine Utility Klasse ist
37 */
38 protected Produktion()
39 {
40 throw new UnsupportedOperationException();
41 }
42
43 /***
44 * Interface mit den benötigten Konstanten
45 */
46 interface Konstanten
47 {
48 /***
49 * Zahl die Hundert Prozent repräsentiert (100.0)
50 */
51 public static final double HUNDRED_PERCENT = 100.0;
52 }
53
54 /***
55 * Liefert die optimale Qualitätssicherung zurück
56 *
57 * @param guteProduktionsmenge Die gute Produktionsmenge
58 * @param kapazitaetsauslastung Die Kapazitätsauslastung
59 * @param kapazitaetsbestandDiesesQuartal Der Kapazitätsbestand an Stunden für diese Quartal
60 * @param fertigungsstueckzeit Die Fertigungsstückzeit
61 * @param grundlohnkosten Die Grundlohnkosten
62 * @param lohnindex Der Lohnerhöhungsindex
63 * @param rohstoffverbrauch Der Rohstoffverbrauch
64 * @param rohstoffwert Der Rohstoffwert
65 * @param inflationsindex Der Inflationsindex
66 * @param ueberstundenzuschlag Der überstundenzuschlag
67 * @param nacharbeitsaufwand Der Nacharbeitsaufwand
68 * @param qualitaetssicherungTabelle Die ArrayList Tabelle mit den Zuordnungen QSAufwendungen - Fehlerrate - Ausschussrate
69 * @return Die optimale Qualitä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
128 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
129
130 return rueckgabewert;
131 }
132
133 /***
134 * Liefert den normale Qualitätssicherung zurück
135 *
136 * @param guteProduktionsmenge Die gute Produktionsmenge
137 * @param kapazitaetsauslastung Die Kapazitätsauslastung
138 * @param kapazitaetsbestandDiesesQuartal Der Kapazitätsbestand an Stunden für diese Quartal
139 * @param fertigungsstueckzeit Die Fertigungsstückzeit
140 * @param grundlohnkosten Die Grundlohnkosten
141 * @param lohnindex Der Lohnerhöhungsindex
142 * @param rohstoffverbrauch Der Rohstoffverbrauch
143 * @param rohstoffwert Der Rohstoffwert
144 * @param inflationsindex Der Inflationsindex
145 * @param ueberstundenzuschlag Der überstundenzuschlag
146 * @param nacharbeitsaufwand Der Nacharbeitsaufwand
147 * @param qualitaetssicherungNominal Die nominalen QSAufwendungen gemä฿ Unternehmensentscheidung
148 * @param qualitaetssicherungTabelle Die ArrayList Tabelle mit den Zuordnungen QSAufwendungen - Fehlerrate - Ausschussrate
149 * @return Die normale Qualitä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
192 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
193
194 return rueckgabewert;
195 }
196
197 /***
198 * Liefert die Herstellkosten zurü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
216 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
217
218 return rueckgabewert;
219 }
220
221 /***
222 * Liefert den Quotient aus Lieferdefizit und Lagerbildung zurü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
245 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
246
247 return rueckgabewert;
248 }
249
250 /***
251 * Liefert den optimalen Zinssatz zurück
252 * Zinssatz Optimal
253 *
254 * @param zuvielbezahlteZinsen Die zuviel bezahlten Zinsen
255 * @param bankkreditVorquartal Die Höhe des Bankkredits im Vorquartal
256 * @param kontokorrentkreditVorquartal Die Höhe des Kontokorrentkredits im Vorquartal
257 * @param optimaleAenderungBankkredit Die optimale Änderung des Bankkredits
258 * @param optimaleAenderungKontokorrentkredit Die optimale Ä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
271 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
272
273 return rueckgabewert;
274 }
275
276 /***
277 * Liefert die Liquiditaetsänderung bei eintreffen des geplanten Absatzes zurück
278 *
279 * @param erfolgVorSteuern Der Erfolg vor Steuern
280 * @param tatsaechlicheLiquiditaetsaenderung Die tatsächliche Liquiditaetsä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öhung
286 * @param rohstoffkosten Die Rohstoffkosten
287 * @return Die Liquiditaetsä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
307 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
308
309 return rueckgabewert;
310 }
311
312 /***
313 * Liefert den Fehleranteil zurück
314 *
315 * @param qualitaetssicherungNominal Die nominalen QSAufwendungen gemä฿ 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
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
344 ergebnis = ((Qualitaetssicherung) qualitaetssicherungTabelle.get(i + 1)).getFehlerrate() - (intervall2 * (differenz / intervall));
345 }
346 }
347
348
349 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
350
351 return rueckgabewert;
352 }
353
354 /***
355 * Liefert die Abschreibungskosten zurück
356 * Tabelle 21 (29)
357 *
358 * @param anlagevermoegenVorquartal Die Höhe des Anlagevermögens im Vorquartal
359 * @param wertberichtigung Die Hö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
367 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
368
369 return rueckgabewert;
370 }
371
372 /***
373 * Liefert die Anlagenprojektierungskosten zurü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
385 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
386
387 return rueckgabewert;
388 }
389
390 /***
391 * Liefert die Rohstoff-Verbrauchskosten zurü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
404 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
405
406 return rueckgabewert;
407 }
408
409 /***
410 * Liefert die Rohstofflagerkosten zurück
411 * Beschaffung und Produktion Tabelle 21 Zeile 34
412 *
413 * @param rohstoffLagerBestandStueck Der Rohstofflagerbestand in Stü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
422 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
423
424 return rueckgabewert;
425 }
426
427 /***
428 * Liefert die Rohstoff-Bestellungskosten zurück
429 * Tabelle 21 (33)
430 *
431 * @param normalBestellungskosten Die Bestellkosten für die normale Rohstoffbestellung
432 * @param expressBestellungskosten Die Bestellkosten fü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
441 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
442
443 return rueckgabewert;
444 }
445
446 /***
447 * Liefert die Fertigungszeit pro gutes Stück zurück
448 * Tabelle 20 (331) => Fertigungszeit in Minuten pro "gutes" Stü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ü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
467 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
468
469 return rueckgabewert;
470 }
471
472 /***
473 * Liefert die gesamte Fertigungszeit zurü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
487 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
488
489 return rueckgabewert;
490 }
491
492 /***
493 * Liefert die Kapazitätsauslastung zurück
494 * Tabelle 20 (332) => Rückgabe in Prozent ; Berechnung des 2. übergabeparameter erfolgt im Vorquartal für das aktuelle
495 *
496 * @param fertigungszeitGesamt Die gesamte Fertigungszeit
497 * @param kapazitaetsbestandVorquartal Der Kapazitätsbestand in Stunden
498 * @return Die Kapazitä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
510 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
511
512 return rueckgabewert;
513 }
514
515 /***
516 * Liefert den Kapazitätsbestand im Folgequartal zurück
517 * Tabelle 20 (333)
518 *
519 * @param kapazitaetsbestand Der Kapazitätsbestand dieses Quartal
520 * @param investitionen Die investitionen
521 * @param abschreibungskosten Die Abschreibungskosten
522 * @param spezifischeInvestionsausgaben Die spezifischen Investitionsausgaben
523 * @return Der Kapazitä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
535 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
536
537 return rueckgabewert;
538 }
539
540 /***
541 * Liefert die Ausschusskosten zurück
542 * Wird für die Qualitätskosten benötigt
543 *
544 * @param nominaleProduktionsmenge Die nominale Produktionsmenge
545 * @param ausschuss Die Ausschussquote
546 * @param fertigungsstueckzeit Die Fertigungszeit pro Stück
547 * @param lohnkosten Die Lohnkosten pro Stück
548 * @param lohnindex Der Lohnerhöhungsindex
549 * @param rohstoffverbrauch Der Rohstoffverbrauch pro Stück
550 * @param rohstoffwert Der Rohstoffwert
551 * @param kapazitaetsauslastung Die Kapazitä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
578 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
579
580 return rueckgabewert;
581 }
582
583 /***
584 * Liefert den Fehlerkosten zurück
585 * Wird für die Qualitätskosten benö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
596 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
597
598 return rueckgabewert;
599 }
600
601 /***
602 * Liefert die Qualitätskosten zurück
603 * Tabelle 20 (341)
604 *
605 * @param nominaleProduktionsmenge Die nominale Produktionsmenge
606 * @param inflationsindex Der Inflationsindex
607 * @param qualitaetssicherungProStueckReal Die reale Qualitätsssicherung pro Stück
608 * @param fehlerkosten Die Fehlerkosten
609 * @return Die Qualitä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
616 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
617
618 return rueckgabewert;
619 }
620
621 /***
622 * Liefert die Nacharbeits-Lohnkosten zurück
623 * Tabelle 20 (342)
624 *
625 * @param fertigungszeit Die Fertigungszeit pro Stück
626 * @param stundenlohn Der Stundelohn
627 * @param ueberstundenZuschlag Der Ü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
648 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
649
650 return rueckgabewert;
651 }
652
653 /***
654 * Liefert die Ausschussquote (25% von der Fehlerrate) zurü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
665 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
666
667 return rueckgabewert;
668 }
669
670 /***
671 * Liefert die reale Qualtätssicherung zurück
672 * Tabelle A1.1 Zeile 2.33 und Tabelle A1.2 Zeile 3.4
673 *
674 * @param qualitaetskostenNominalProStueck Qualtätskosten pro nominal produziertes Stück
675 * @param inflationsindex Der Inflationsindex
676 * @return Die reale Qualtä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
688 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
689
690 return rueckgabewert;
691 }
692
693 /***
694 * Liefert die nominale Produktionsmenge zurü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
708 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
709
710 return rueckgabewert;
711 }
712
713 /***
714 * Liefert die nacharbeitbare Produktionsmenge zurü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
728 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
729
730 return rueckgabewert;
731 }
732
733 /***
734 * Liefert die Ausschuss-Produktionsmenge zurü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
747 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
748
749 return rueckgabewert;
750 }
751
752 /***
753 * Liefert die fehlerhafte Produktionsmenge zurü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
767 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
768
769 return rueckgabewert;
770 }
771
772 /***
773 * Liefert die Aufarbeitungskosten zurück
774 * Tabelle21 Zeile 24
775 *
776 * @param lagerbestandFertigprodukteVorquartal Der Lagerbestand an Fertigprodukten im Vorquartal
777 * @param produktartaenderungInStufen Die Produktartä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
785 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
786
787 return rueckgabewert;
788 }
789
790 /***
791 * Liefert die gesamten Qualitätssicherungsaufwendungen zurü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ück aufgewendeten Qualitätssicherungskosten
797 * @return Die gesamten Qualitätssicherungsaufwendungen
798 */
799 public static final double qualitaetssicherungGesamt(final double nominaleProduktionsmenge, final double qualitaetssicherungskostenNominalProStueck)
800 {
801 double ergebnis = (nominaleProduktionsmenge * qualitaetssicherungskostenNominalProStueck);
802
803
804 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
805
806 return rueckgabewert;
807 }
808
809 /***
810 * Liefert die Fertigungs-Lohnkosten zurück
811 * Tabelle 20 (26)
812 *
813 * @param nominaleProduktionsmenge Die nominale Produktionsmenge
814 * @param fertigungszeitNominal Die nominale Fertigungszeit pro Stück
815 * @param lohnkostenMitErhoehung Die Lohnkosten mit Erhö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
825 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
826
827 return rueckgabewert;
828 }
829
830 /***
831 * Liefert die Überstundenzuschläge zurück
832 * Tabelle 20 (27)
833 *
834 * @param kapazitaetsauslastung Die Kapazitätsauslastung
835 * @param fertigungszeitGesamt Die gesamte Fertigungszeit
836 * @param kapazitaetsbestandFolgeQuartalVorquartal Der Kapazitätsbestand im Folgequartal
837 * @param lohnkostenMitErhoehung Lohnkosten mit Erhöhung
838 * @return Die Überstundenzuschlä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ä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
859 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
860
861 return rueckgabewert;
862 }
863
864 /***
865 * Liefert die Lohnrate zurück
866 * Lohnrate in Prozent
867 *
868 * @param lohnindexVorquartal Der Lohnerhöhungsindex im Vorquartal
869 * @param lohnrate Die Lohnerhö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;
878
879
880 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
881
882 return rueckgabewert;
883 }
884
885 /***
886 * Liefert die nominalen Lohnkosten zurück
887 *
888 * @param lohnkosten Die Lohnkosten
889 * @param lohnindex Der Lohnerhö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
897 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
898
899 return rueckgabewert;
900 }
901
902 /***
903 * Liefert die Verwaltungskosten zurück
904 * Tabelle: 21 Zeile 41
905 *
906 * @param kapazitaetsauslastung Die Kapazitätsauslastung
907 * @param lohnindex Der Lohnerhö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
932 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
933
934 return rueckgabewert;
935 }
936
937 /***
938 * Liefert die Schichtwechsel-Kosten zurück
939 * Tabelle 21 Zeile 28
940 *
941 *
942 * @param schichtwechselKosten Die Basis-Schichtwechselkosten
943 * @param kapazitaetsauslastungVorquartal Die Kapazitätsauslastung im Vorquartal
944 * @param kapazitaetsauslastung Die Kapazitätsauslastung
945 * @param lohnindex Der Lohnerhö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
967 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
968
969 return rueckgabewert;
970 }
971
972 /***
973 * Liefert die aktuelle Schicht ausgehend von der Kapazitätsauslastung zurück
974 *
975 * @param kapazitaetsauslastung Die Kapazitä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
993 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
994
995 return rueckgabewert;
996 }
997
998 /***
999 * Liefert den Rohstoffverbrauch zurück
1000 * Tabelle: 20 Zeile 42
1001 *
1002 * @param nominaleProduktionsmenge Die nominale Produktionsmenge
1003 * @param rohstoffverbrauchProStueck Der Rohstoffverbrauch pro Stü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
1011 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1012
1013 return rueckgabewert;
1014 }
1015
1016 /***
1017 * Liefert den Rohstofflagerbestand zurü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
1030 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1031
1032 return rueckgabewert;
1033 }
1034
1035 /***
1036 * Liefert den Rohstoffpreis zurü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
1047 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1048
1049 return rueckgabewert;
1050 }
1051
1052 /***
1053 * Liefert den Rohstoffwert zurü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
1073 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1074
1075 return rueckgabewert;
1076 }
1077
1078 /***
1079 * Liefert die gesamte Fertigungszeit der Fertigungs-Lohnkosten zurück
1080 * für die neue Berechnung der Fertigungslohnkosten relevant
1081 *
1082 * @param nominaleProduktionsmenge Die nominale Produktionsmenge
1083 * @param fertigungsstueckzeit Die Fertigungszeit pro Stü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
1092 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1093
1094 return rueckgabewert;
1095 }
1096
1097 /***
1098 * Liefert die normale Kapazität zurück
1099 * Unter Berücksichtigung der gesamten Fertigungszeit
1100 * Der Kapazitätsbestand wird im Vorquartal für das aktuelle berechnet
1101 * dass heisst 2te Schicht => die Normalkapazität ist doppelt so hoch wie die Kapazitaetsauslastung bei 100%
1102 * dass heisst 3te Schicht => die Normalkapazität ist dreimal so hoch wie die Kapazitaetsauslastung bei 100%
1103 *
1104 * @param kapazitaetsauslastung Die Kapazitätsauslastung
1105 * @param kapazitaetsbestandVorquartal Die Kapazitätsauslastung im Vorquartal
1106 * @return Die normale Kapazitä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
1125 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1126
1127 return rueckgabewert;
1128 }
1129
1130 /***
1131 * Liefert die Fertigungszeit ohne Überstunden und ohne Nacharbeit zurück
1132 * Fertigungszeit ohne Nacharbeit und ohne überstunden
1133 *
1134 * @param nominaleProduktionsmenge Die nominale Produktionsmenge
1135 * @param fertigungsstueckZeit Die Fertigungszeit pro Stück
1136 * @return Die Fertigungszeit ohne Ü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
1143 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1144
1145 return rueckgabewert;
1146 }
1147
1148 /***
1149 * Liefert die Fertigungs-Lohnkosten ohne Überstunden und ohne Nacharbeit zurück
1150 * Tabelle 21 Zeile 261
1151 * Fertigungslohnkosten ohne überstunden und ohne Nacharbeit
1152 *
1153 * @param fertigungszeitOhneUeberstundenOhneNacharbeit Die Fertigungszeit ohne Überstunden und ohne Nacharbeit
1154 * @param lohnkosten Die Lohnkosten
1155 * @return Die Fertigungs-Lohnkosten ohne Ü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
1162 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1163
1164 return rueckgabewert;
1165 }
1166
1167 /***
1168 * Liefert die Überstundenzuschläge der Fertigungs-Lohnkosten zurück
1169 * Tabelle 21 Zeile 262
1170 * anteilige überstundenzuschläge für die Fertigungslohnkosten ohne Nacharbeit
1171 * bei den Lohnkosten sind die aufgelaufenen Lohnerhöhungen / -erniedrigungen zu berücksichtigen
1172 *
1173 * @param fertigungszeitOhneUeberstundenOhneNacharbeit Die Fertigungszeit ohne Überstunden und ohne Nacharbeit
1174 * @param normalkapazitaet Die normale Kapazität
1175 * @param lohnkosten Die Lohnkosten
1176 * @return Die Überstundenzuschlä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
1196 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1197
1198 return rueckgabewert;
1199 }
1200
1201 /***
1202 * Liefert die Nacharbeitszeit ohne Überstunden zurück
1203 * Nacharbeitszeit ohne ü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ück
1208 * @param nacharbeitsaufwand Der Nacharbeitsaufwand
1209 * @return Die Nacharbeitszeit ohne Ü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
1216 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1217
1218 return rueckgabewert;
1219 }
1220
1221 /***
1222 * Liefert die Nacharbeits-Lohnkosten ohne Überstunden zurück
1223 * Tabelle 21 Zeile 263
1224 * Nacharbeitslohnkosten ohne ü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öhungen / -erniedrigungen zu berücksichtigen
1227 *
1228 * @param nacharbeitsZeitOhneUeberstunden Die Nacharbeitszeit ohne Überstunden
1229 * @param lohnkosten Die Lohnkosten
1230 * @return Die Nacharbeits-Lohnkosten ohne Überstunden
1231 */
1232 public static final double nacharbeitslohnkostenOhneUeberstunden(final double nacharbeitsZeitOhneUeberstunden, final double lohnkosten)
1233 {
1234 double ergebnis = (nacharbeitsZeitOhneUeberstunden * lohnkosten);
1235
1236
1237 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1238
1239 return rueckgabewert;
1240 }
1241
1242 /***
1243 * Liefert die Überstundenzuschläge auf die Nacharbeit zurück
1244 * Tabelle 21 Zeile 264
1245 * anteilige überstundenzuschläge für die Nacharbeit
1246 * 1. Fall: die gesamte Fertigungszeit ist kleiner als die Normalkapazitaet => keine überstunden für die Nacharbeit
1247 * 2. Fall: die Fertigungszeit ohne Nacharbeit ist grö฿er als die Normalkapazität => gesamte Nacharbeit ist in überstunden
1248 * 3. Fall: die gesamte Fertigungszeit ist grö฿er als die Normalkapazität => ein Teil der Nacharbeit ist in überstunden
1249 * bei den Lohnkosten sind die aufgelaufenen Lohnerhöhungen / -erniedrigungen zu berücksichtigen
1250 *
1251 * @param nacharbeitslohnkostenOhneUeberstunden Die Nacharbeits-Lohnkosten ohne Überstunden
1252 * @param fertigungszeitGesamt Die gesamte Fertigungszeit
1253 * @param fertigungszeitOhneUeberstundenOhneNacharbeit Die Fertigungszeit ohne Überstunden und ohne Nacharbeit
1254 * @param nacharbeitsZeitOhneUeberstunden Die Nacharbeitszeit ohne Überstunden
1255 * @param normalkapazitaet Die Normalkapazität
1256 * @param lohnkosten Die Lohnkosten
1257 * @return Die Überstundenzuschlä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ä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
1297 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1298
1299 return rueckgabewert;
1300 }
1301
1302 /***
1303 * Liefert die Lohnkosten zurück
1304 * Tabelle 20 Zeile 342
1305 *
1306 * @param nacharbeitslohnkostenOhneUeberstunden Die Nacharbeits-Lohnkosten ohne Überstunden
1307 * @param ueberstundenzuschlagNacharbeit Die Überstundenzuschlä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
1315 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1316
1317 return rueckgabewert;
1318 }
1319
1320 /***
1321 * Liefert die gesamten Fertigungs-Lohnkosten zurück
1322 *
1323 * @param ueberstundenzuschlagNacharbeit Die Überstundenzuschläge auf die Nacharbeit
1324 * @param nacharbeitslohnkostenOhneUeberstunden Die Nacharbeits-Lohnkosten ohne Überstunden
1325 * @param fertigungsLohnKostenOhneUeberstundenOhneNacharbeit Die Fertigungslohnkosten ohne Überstunden und ohne Nacharbeit
1326 * @param ueberstundenzuschlaegeFertigungsLohnKosten Die Überstundenzuschlä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
1334 double rueckgabewert = Common.aufZehnNachkommastellenRunden(ergebnis);
1335
1336 return rueckgabewert;
1337 }
1338 }