fix: kismi ihalede sahte kirim orani — maliyet tum ihale, bedel kisim basina
Sonuc ayristirici yaklasik maliyeti TUM ihale icin okuyor ((?<!Kısımlarının )Yaklaşık Maliyeti), sozlesme bedeli ise kisim basina satir. 11 kisimlik ilac ihalesinin ilk kismi 1,6 milyon tahmine karsi 25 bine verilmisse rakip radarinda "%98 kirim" cikiyordu — aritmetik kurgu. Kirim artik yalnizca tek sonuc satiri olan (kisimsiz) ihalelerde hesaplaniyor. Yanlis bir oran, hic oran olmamasindan kotudur. Test: A (kisimsiz) → %20; B ve C (ayni IKN, iki kisim) → null. Bulgu kaynagi: erenulutas0/MOBIT-DURT README "olcerek cozulmus uc tuzak". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -29,6 +29,13 @@ export function normProvince(name) {
|
|||||||
export function firmStats(tenders) {
|
export function firmStats(tenders) {
|
||||||
const map = new Map();
|
const map = new Map();
|
||||||
let awardCount = 0;
|
let awardCount = 0;
|
||||||
|
// Kısmi ihale tuzağı: yaklaşık maliyet TÜM ihale için okunuyor, sözleşme
|
||||||
|
// bedeli ise kısım başına. 11 kısımlık ilaç ihalesinin ilk kısmı 1,6 milyon
|
||||||
|
// tahmine karşı 25 bine verilmişse bu %98 kırım değil, aritmetik kurgudur.
|
||||||
|
// Kırım yalnızca tek sonuç satırı olan (kısımsız) ihalelerde hesaplanır;
|
||||||
|
// yanlış bir oran, hiç oran olmamasından kötüdür.
|
||||||
|
const iknSatir = new Map();
|
||||||
|
for (const t of tenders) if (t.kazananFirma && t.ikn) iknSatir.set(t.ikn, (iknSatir.get(t.ikn) || 0) + 1);
|
||||||
for (const t of tenders) {
|
for (const t of tenders) {
|
||||||
if (!t.kazananFirma) continue;
|
if (!t.kazananFirma) continue;
|
||||||
awardCount++;
|
awardCount++;
|
||||||
@@ -43,7 +50,8 @@ export function firmStats(tenders) {
|
|||||||
cur.wins++;
|
cur.wins++;
|
||||||
if (val != null) cur.total += val;
|
if (val != null) cur.total += val;
|
||||||
const maliyet = parseTL(t.yaklasikMaliyet);
|
const maliyet = parseTL(t.yaklasikMaliyet);
|
||||||
if (val != null && maliyet > 0 && val <= maliyet * 1.5) {
|
const kisimsiz = (iknSatir.get(t.ikn) || 1) === 1;
|
||||||
|
if (kisimsiz && val != null && maliyet > 0 && val <= maliyet * 1.5) {
|
||||||
cur.kirimToplam += 1 - val / maliyet;
|
cur.kirimToplam += 1 - val / maliyet;
|
||||||
cur.kirimAdet++;
|
cur.kirimAdet++;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user