diff --git a/docs/FALUKANT_DIRECTOR_PRODUCTION_COST.md b/docs/FALUKANT_DIRECTOR_PRODUCTION_COST.md index 4cdc497..eb702ff 100644 --- a/docs/FALUKANT_DIRECTOR_PRODUCTION_COST.md +++ b/docs/FALUKANT_DIRECTOR_PRODUCTION_COST.md @@ -21,9 +21,13 @@ effektiv = raw × (1 − discount) | `PRODUCTION_HEADROOM_DISCOUNT_PER_STEP` | `0.035` | Rabatt pro Headroom-Stufe | | `PRODUCTION_HEADROOM_DISCOUNT_CAP` | `0.14` | maximaler Gesamtrabatt | -## Worth in SQL +## Worth in SQL (`QUERY_GET_BEST_PRODUCTION`) -`QUERY_GET_BEST_PRODUCTION` sortiert nach einer Worth-Zeile (u. a. `- 6 * ftp.category`). Bei größeren Formeländerungen Worth **mit** anpassen, damit der Director weiterhin sinnvoll sortiert. +Sortierung nach **regionalem Erlös pro Zeiteinheit**: + +`(sell_cost * worth_percent/100) / production_time` + +Damit entspricht die Auswahl in etwa **„Erlös pro Minute“** (Listenpreis × Markt in der Region ÷ Dauer einer Produktionscharge). **Wissen** fließt hier **nicht** in die Reihenfolge ein (Wissen wirkt bei euch auf Qualität/Preis beim Verkauf, nicht auf die Produktwahl). Die **Stückkosten** kommen nur aus der Rust-Formel beim Abbuchen. ## Parallelproduktionen diff --git a/src/worker/sql.rs b/src/worker/sql.rs index f7cc075..c957cb7 100644 --- a/src/worker/sql.rs +++ b/src/worker/sql.rs @@ -78,7 +78,10 @@ SELECT fdu.id falukant_user_id, CAST(fdu.money AS text) AS money, fdu.certificat COALESCE(ftp.category, 1)::int AS product_category, fdb.region_id, (SELECT SUM(quantity) FROM falukant_data.stock fds WHERE fds.branch_id = fdb.id) AS stock_size, COALESCE((SELECT SUM(COALESCE(fdi.quantity, 0)) FROM falukant_data.stock fds JOIN falukant_data.inventory fdi ON fdi.stock_id = fds.id WHERE fds.branch_id = fdb.id), 0) AS used_in_stock, -(ftp.sell_cost * (fdtpw.worth_percent + (fdk_character.knowledge * 2 + fdk_director.knowledge) / 3) / 100 - 6 * ftp.category) / (300.0 * ftp.production_time) AS worth, +-- Ranking = regionaler Erlös pro Zeiteinheit (wie „Erlös/Minute“ in der Oberfläche): +-- Listenpreis * regionaler Marktanteil / Produktionsdauer — ohne Wissens-Additiv und ohne alte Kostenstrafe +-- im Zähler (die echte Stückkosten berechnet der Director in Rust). +( (ftp.sell_cost * (fdtpw.worth_percent / 100.0)) / NULLIF(ftp.production_time::float8, 0.0) ) AS worth, fdb.id AS branch_id, (SELECT COUNT(id) FROM falukant_data.production WHERE branch_id = fdb.id) AS running_productions, COALESCE((SELECT SUM(COALESCE(fdp.quantity, 0)) quantity FROM falukant_data.production fdp WHERE fdp.branch_id = fdb.id), 0) AS running_productions_quantity FROM falukant_data.director fdd