Μεθοδολογία
Έκδοση: 0.1 (draft) · Τελευταία ενημέρωση: 2026-07-08 · Άδεια: CC BY 4.0
Κεντρική αρχή — διαβάστε πρώτα αυτό: Οι δείκτες που δημοσιεύονται εδώ είναι στατιστικοί δείκτες ρίσκου διαδικασιών, όχι διαπιστώσεις παρανομίας, διαφθοράς ή κακοδιαχείρισης. Ένας υψηλός δείκτης σημαίνει «μοτίβο που, σύμφωνα με τη διεθνή βιβλιογραφία, δικαιολογεί περαιτέρω διερεύνηση» — τίποτα περισσότερο. Όπως το διατυπώνει το Red Flags Project (Ουγγαρία): «risky does not mean corrupt». Πολλά flags έχουν απολύτως νόμιμες εξηγήσεις (επείγουσες ανάγκες, εξειδικευμένες αγορές με έναν προμηθευτή, μικρά δείγματα, νησιωτικότητα κ.ά.).
1. Σκοπός
Η πλατφόρμα συγκεντρώνει, κανονικοποιεί και οπτικοποιεί δημόσια, ανοιχτά δεδομένα δημοσίων συμβάσεων της Ελλάδας, και υπολογίζει πάνω σε αυτά επικυρωμένους από τη βιβλιογραφία δείκτες ακεραιότητας διαδικασιών (procurement integrity indicators). Στόχοι:
- Να μπορεί κάθε πολίτης να δει τι αγοράζει ο δήμος, η περιφέρεια ή το υπουργείο του, από ποιον και με ποια διαδικασία.
- Να αναδεικνύονται μοτίβα που η διεθνής έρευνα συσχετίζει με αυξημένο ρίσκο μειωμένου ανταγωνισμού — πάντα με πλήρη πρόσβαση στα πρωτογενή δεδομένα και στη μεθοδολογία υπολογισμού.
- Να παρέχεται στους φορείς και τις εταιρείες δικαίωμα απάντησης/διόρθωσης (βλ. DISCLAIMER.md).
Ό,τι δημοσιεύεται συνοδεύεται από: (α) τα raw δεδομένα από τα οποία προέκυψε, (β) link στο πρωτότυπο ΑΔΑΜ/ΑΔΑ, (γ) την ακριβή φόρμουλα υπολογισμού, (δ) τους περιορισμούς της.
2. Πηγές δεδομένων
2.1 ΚΗΜΔΗΣ Open Data API (κύρια πηγή)
- URL:
https://cerpp.eprocurement.gov.gr/khmdhs-opendata - Τεκμηρίωση: Swagger UI
- Άδεια δεδομένων: Creative Commons Attribution 4.0 (CC BY 4.0)
- Όριο χρήσης: 350 requests/λεπτό (η υλοποίησή μας περιορίζεται συντηρητικά στα 300)
Το Κεντρικό Ηλεκτρονικό Μητρώο Δημοσίων Συμβάσεων (ΚΗΜΔΗΣ) είναι το επίσημο μητρώο στο οποίο οι αναθέτουσες αρχές υποχρεούνται εκ του νόμου (ν. 4412/2016) να καταχωρίζουν τις πράξεις τους. Οντότητες που αντλούμε:
| Οντότητα | Endpoint | Πρόθεμα ΑΔΑΜ | Περιεχόμενο |
|---|---|---|---|
| Αιτήματα | POST /request |
REQ |
Πρωτογενή αιτήματα δαπάνης |
| Προσκλήσεις/Προκηρύξεις/Διακηρύξεις | POST /notice |
PROC |
Δημοσίευση πρόθεσης σύναψης σύμβασης |
| Αναθέσεις | POST /auction |
AWRD |
Αποφάσεις ανάθεσης (κατακύρωσης) |
| Συμβάσεις | POST /contract |
SYMV |
Υπογεγραμμένες συμβάσεις |
| Εντολές Πληρωμών | POST /payment |
PAY |
Εντολές πληρωμής |
| Συνδεδεμένες Πράξεις | GET /adamChain/{ΑΔΑΜ} |
— | Η αλυσίδα REQ→PROC→AWRD→SYMV→PAY |
Κρίσιμα πεδία κάθε εγγραφής (επιβεβαιωμένα από το API):
referenceNumber— ο ΑΔΑΜ (μοναδικό αναγνωριστικό, π.χ.25AWRD016745076), που επιτρέπει σε οποιονδήποτε να επαληθεύσει την πράξη στο ΚΗΜΔΗΣ.organizationVatNumber,organization— ΑΦΜ και όνομα αναθέτουσας αρχής.classificationOfPublicLawOrganization,typeOfContractingAuthority— τύπος φορέα (π.χ. ΟΤΑ).procedureType— τύπος διαδικασίας· η τιμή «Απευθείας ανάθεση» ξεχωρίζει τις απευθείας αναθέσεις.totalCostWithVAT,totalCostWithoutVAT,budget— ποσά.nutsCode,nutsCity,nutsPostalCode— γεωγραφικός προσδιορισμός.objectDetailsList[].cpvs— κωδικοί CPV (κατηγοριοποίηση αντικειμένου), ποσότητες, μονάδες.contractingDataDetails.contractingMembersDataList[]— ΑΦΜ και όνομα αναδόχου/-ων.noticeRefNo,contractRefNo,paymentRefNo,approvedRequestsList— σύνδεσμοι της αλυσίδας ΑΔΑΜ.submissionDate,signedDate,lastUpdateDate— ημερομηνίες.cancelled,amendPreviousAuction,isModified— κατάσταση/τροποποιήσεις.
2.2 Μελλοντικές/συμπληρωματικές πηγές (δεν χρησιμοποιούνται ακόμα)
- ΔΙΑΥΓΕΙΑ (diavgeia.gov.gr): εγκρίσεις δαπανών, οριστικοποιήσεις πληρωμών, προϋπολογισμοί/απολογισμοί ΟΤΑ.
- ΕΛΣΤΑΤ: Δείκτης Τιμών Καταναλωτή και δείκτες κόστους κατασκευής, για αποπληθωρισμό ποσών.
- ΓΕΜΗ Open Data (Φάση 2): προφίλ εταιρειών-αναδόχων.
- TED (Φάση 3): διασταύρωση συμβάσεων άνω των ορίων ΕΕ.
Κάθε νέα πηγή θα τεκμηριώνεται εδώ πριν χρησιμοποιηθεί σε δημοσιευμένο δείκτη.
3. Συλλογή & επεξεργασία δεδομένων
- Άντληση: μέσω του open-source client μας (src/kimdis/client.py): σελιδοποίηση 50 εγγραφών/σελίδα, χρονικά παράθυρα ≤180 ημερών, όριο <350 αιτήματα/λεπτό, αυτόματη επανάληψη σε προσωρινά σφάλματα. Τα δεδομένα αποθηκεύονται ως έχουν (raw) σε μορφή Parquet.
- Έλεγχοι πληρότητας: για κάθε batch μετράμε % εγγραφών με έγκυρο ΑΔΑΜ, ημερομηνία, ποσό, ΑΦΜ (με έλεγχο checksum), CPV. Τα reports πληρότητας δημοσιεύονται.
- Κανονικοποίηση: ενιαίος πίνακας φορέων (ΑΦΜ → όνομα → τύπος → NUTS) και αναδόχων. Στη Φάση 2 προστίθεται entity resolution (deduplication παραλλαγών ονομάτων) με μετρημένη ακρίβεια σε χειροκίνητο δείγμα.
- Αποπληθωρισμός: όπου συγκρίνονται ποσά μεταξύ ετών, μετατρέπονται σε σταθερές τιμές έτους βάσης με τον ΔΤΚ της ΕΛΣΤΑΤ. Ονομαστικά και αποπληθωρισμένα ποσά εμφανίζονται και τα δύο.
- Καμία χειροκίνητη παρέμβαση σε τιμές: δεν διορθώνουμε, δεν συμπληρώνουμε και δεν «καθαρίζουμε» ποσά ή ονόματα πέρα από τεκμηριωμένους, αναπαραγώγιμους κανόνες που ζουν στον κώδικα αυτού του repo.
4. Δείκτες (v1)
Όλοι οι δείκτες v1 υπολογίζονται αποκλειστικά από πεδία ΚΗΜΔΗΣ και στηρίζονται σε επικυρωμένη βιβλιογραφία (βλ. §8). Κάθε δείκτης δημοσιεύεται μαζί με: το N (μέγεθος δείγματος), την περίοδο αναφοράς, και τα επιμέρους στοιχεία από τα οποία υπολογίστηκε.
4.1 Ποσοστό απευθείας αναθέσεων
- Ορισμός: Μερίδιο των αναθέσεων ενός φορέα που έγιναν με τη διαδικασία «Απευθείας ανάθεση», υπολογισμένο και σε πλήθος και σε αξία.
- Φόρμουλα:
DA_count = N_direct / N_total,DA_value = Σ(value_direct) / Σ(value_total)ανά φορέα ανά έτος (προαιρετικά ανά CPV division). - Πεδία:
procedureType,totalCostWithoutVAT,organizationVatNumber. - Λογική: Η απευθείας ανάθεση είναι νόμιμη κάτω από όρια του ν. 4412/2016, αλλά συστηματικά υψηλά ποσοστά σημαίνουν περιορισμένο ανταγωνισμό (OECD, EU Single Market Scoreboard).
- Παγίδες: μικροί φορείς με λίγες, μικρές προμήθειες θα έχουν φυσιολογικά υψηλό ποσοστό σε πλήθος· γι’ αυτό δείχνουμε πάντα και το ποσοστό σε αξία και το N.
4.2 Συγκέντρωση αναδόχων (HHI & top-1 μερίδιο)
- Ορισμός: Πόσο συγκεντρωμένες είναι οι δαπάνες ενός φορέα σε λίγους αναδόχους.
- Φόρμουλα:
HHI = Σᵢ(sᵢ²)όπουsᵢτο μερίδιο (0–1) του αναδόχου i στη συνολική αξία συμβάσεων του φορέα στην περίοδο· επίσηςtop1 = max(sᵢ). HHI > 0,25 θεωρείται υψηλή συγκέντρωση (κατά αναλογία με τα όρια ανταγωνισμού). - Πεδία:
contractingMembersDataList[].vatNumber,totalCostWithoutVAT. - Παγίδες: εξειδικευμένες αγορές (π.χ. συντήρηση συγκεκριμένου λογισμικού) έχουν εγγενώς λίγους προμηθευτές· ο δείκτης υπολογίζεται και ανά CPV division για να μετριάζεται αυτό. Απαιτείται ελάχιστο N συμβάσεων (≥10) για να δημοσιευθεί.
4.3 Single-bid rate
- Ορισμός: Μερίδιο ανταγωνιστικών διαδικασιών με μία μόνο προσφορά.
- Φόρμουλα:
SB = N_single_bid / N_competitive, μόνο όπου τα δεδομένα προσφορών είναι διαθέσιμα. - Λογική: Ο πιο ευρέως επικυρωμένος μεμονωμένος δείκτης στη βιβλιογραφία (Fazekas & Kocsis· EU Single Market Scoreboard — Ελλάδα: από τις υψηλότερες τιμές στην ΕΕ).
- Παγίδες: το πεδίο δεν υπάρχει σε όλες τις εγγραφές ΚΗΜΔΗΣ· ο δείκτης υπολογίζεται μόνο στο υποσύνολο με διαθέσιμα δεδομένα και το ποσοστό κάλυψης δημοσιεύεται δίπλα του.
4.4 Έλεγχος Benford (1ο & 2ο ψηφίο)
- Ορισμός: Στατιστική απόκλιση της κατανομής πρώτων/δεύτερων ψηφίων των ποσών ενός φορέα από την αναμενόμενη κατανομή Benford.
- Φόρμουλα: Κατανομή αναφοράς
P(d) = log₁₀(1 + 1/d). Μέτρο απόκλισης: MAD (Mean Absolute Deviation) με τα κατώφλια συμμόρφωσης του Nigrini· το χ² αναφέρεται συμπληρωματικά. - Πεδία:
totalCostWithoutVATσε πληρωμές/συμβάσεις. - Παγίδες: ο Benford δεν είναι απόδειξη κανενός — αποκλίσεις προκύπτουν φυσιολογικά από θεσμικά κατώφλια (π.χ. πολλές συμβάσεις ακριβώς κάτω από όριο), στρογγυλοποιημένους προϋπολογισμούς, ομοιογενείς αγορές. Απαιτεί μεγάλο N (≥300 εγγραφές) και χρησιμοποιείται μόνο ως δευτερεύον σήμα, ποτέ μόνος του.
4.5 Κατακερματισμός συμβάσεων (bid-splitting)
- Ορισμός: Ασυνήθιστη συγκέντρωση αναθέσεων ακριβώς κάτω από το εκάστοτε νόμιμο όριο απευθείας ανάθεσης.
- Μέθοδος: Ιστόγραμμα αξιών γύρω από το κατώφλι (π.χ. ±20%)· δείκτης = λόγος πυκνότητας στο διάστημα αμέσως κάτω από το όριο προς το διάστημα αμέσως πάνω (McCrary-style density test). Συμπληρωματικά: πλήθος «δίδυμων» αναθέσεων ίδιου φορέα, ίδιου CPV, σε κοντινές ημερομηνίες, με άθροισμα πάνω από το όριο.
- Πεδία:
totalCostWithoutVAT,procedureType,organizationVatNumber, CPV, ημερομηνίες. - Παγίδες: τα όρια έχουν αλλάξει διαχρονικά (καταγράφουμε τον πίνακα ορίων ανά περίοδο στον κώδικα)· η συγκέντρωση κάτω από το όριο είναι εν μέρει αναμενόμενη ορθολογική συμπεριφορά — σημασία έχει η σύγκριση μεταξύ φορέων, όχι η απόλυτη τιμή.
4.6 Ποσοστό έκπτωσης προκήρυξης → σύμβασης
- Ορισμός: Διαφορά εκτιμώμενης αξίας (προκήρυξη) και τελικής αξίας (σύμβαση).
- Φόρμουλα:
discount = (est_value − contract_value) / est_value, μέσω σύνδεσης ΑΔΑΜ (noticeRefNo→contractRefNo). - Λογική: Σε ανταγωνιστικές αγορές αναμένονται θετικές εκπτώσεις· συστηματικά μηδενικές εκπτώσεις σε ανταγωνιστικές διαδικασίες είναι καθιερωμένο red flag (OECD bid-rigging screens).
- Παγίδες: μεμονωμένη μηδενική έκπτωση δεν σημαίνει τίποτα· ο δείκτης είναι το ποσοστό των διαδικασιών φορέα με ~0% έκπτωση, όχι η έκπτωση μιας σύμβασης.
4.7 Σύντομες προθεσμίες υποβολής
- Ορισμός: Ημέρες από τη δημοσίευση της προκήρυξης έως την καταληκτική ημερομηνία υποβολής προσφορών.
- Φόρμουλα:
days = finalDate − submissionDate(πεδία notice)· flag όταν είναι κάτω από τα ελάχιστα εύλογα όρια ανά τύπο διαδικασίας, και δείκτης φορέα = μερίδιο διαδικασιών με «σύντομη» προθεσμία. - Λογική: Πολύ σύντομες προθεσμίες ευνοούν προμηθευτές με εκ των προτέρων γνώση (Fazekas CRI component, DIGIWHIST).
4.8 Σύνθετος δείκτης (τύπου CRI)
- Φόρμουλα: Απλός (μη σταθμισμένος) μέσος όρος των διαθέσιμων επιμέρους flags του φορέα, κανονικοποιημένων στο [0,1]. Αν ένας δείκτης δεν υπολογίζεται (ανεπαρκές N), εξαιρείται από τον μέσο και αυτό σημειώνεται.
- Κανόνας παρουσίασης: Ο σύνθετος δείκτης δεν εμφανίζεται ποτέ μόνος — πάντα μαζί με όλα τα επιμέρους flags και τα N τους. Ακολουθούμε την πρακτική του Corruption Risk Index (Fazekas et al.) και του Government Transparency Institute.
- Ερμηνεία: Ο δείκτης μετρά χαρακτηριστικά διαδικασιών, όχι πρόσωπα ή προθέσεις. Κατατάξεις παρουσιάζονται με ουδέτερη γλώσσα («δείκτες διαφάνειας διαδικασιών»).
5. Κατώφλια δημοσίευσης & στατιστική προστασία
- Δείκτης φορέα δημοσιεύεται μόνο αν βασίζεται σε επαρκές δείγμα (ελάχιστα N ανά δείκτη, όπως ορίζονται στην §4). Κάτω από το κατώφλι εμφανίζεται «ανεπαρκή δεδομένα».
- Οι κατατάξεις συνοδεύονται από διαστήματα/αβεβαιότητα όπου υπολογίζονται (π.χ. Wilson intervals σε ποσοστά).
- Ακραίες τιμές ελέγχονται πρώτα για σφάλματα καταχώρισης (π.χ. ποσά ×1000) και επισημαίνονται ως πιθανά data errors, όχι ως ευρήματα.
6. Τι ΔΕΝ ισχυριζόμαστε
- Δεν ισχυριζόμαστε ότι οποιοσδήποτε φορέας, εταιρεία ή πρόσωπο έχει διαπράξει παρανομία. Αυτό μπορεί να το κρίνει μόνο δικαστήριο ή αρμόδια ελεγκτική αρχή.
- Δεν υπολογίζουμε «πραγματικό κόστος αγοράς» ή «υπερτιμολόγηση» συγκεκριμένης σύμβασης — δεν υπάρχουν τα δεδομένα για κάτι τέτοιο. Ό,τι συγκρίσεις τιμών γίνουν (Φάση 3) θα είναι σχετικές συγκρίσεις εντός του ίδιου dataset (π.χ. απόσταση από τη διάμεση τιμή μονάδας ίδιου CPV/έτους), με δημοσιευμένη φόρμουλα.
- Δεν δημοσιεύουμε δεδομένα φυσικών προσώπων στη v1. Μόνο φορείς και νομικά πρόσωπα.
- Συγκεντρωτικές εκτιμήσεις «δυνητικής εξοικονόμησης» (Φάση 3) θα παρουσιάζονται μόνο ως εύρος σε εθνικό/κλαδικό επίπεδο με ρητές παραδοχές, ποτέ ως ποσό που αποδίδεται σε συγκεκριμένο φορέα.
7. Διαφάνεια, αναπαραγωγιμότητα & changelog
- Όλος ο κώδικας συλλογής και υπολογισμού είναι open source σε αυτό το repository. Οποιοσδήποτε μπορεί να αναπαραγάγει κάθε δημοσιευμένο αριθμό.
- Κάθε αλλαγή σε φόρμουλα, κατώφλι ή πηγή δεδομένων καταγράφεται σε changelog αλγορίθμων (σε αυτό το αρχείο, §9) με ημερομηνία και αιτιολόγηση, και αποτυπώνεται στο git history.
- Λάθη που εντοπίζονται (από εμάς ή από τρίτους μέσω της διαδικασίας διόρθωσης) διορθώνονται και η διόρθωση δημοσιεύεται.
8. Βιβλιογραφία & πρότυπα
- Fazekas, M., Tóth, I. J., & King, L. P. — An Objective Corruption Risk Index Using Public Procurement Data (Corruption Risk Index / CRI).
- Fazekas, M. & Kocsis, G. — Uncovering High-Level Corruption: Cross-National Objective Corruption Risk Indicators Using Public Procurement Data.
- OECD — Guidelines for Fighting Bid Rigging in Public Procurement & Analytics for Integrity.
- DIGIWHIST / Government Transparency Institute — opentender.eu indicators methodology.
- European Commission — Single Market Scoreboard, Public Procurement indicators.
- Nigrini, M. — Benford’s Law: Applications for Forensic Accounting, Auditing, and Fraud Detection.
- Red Flags Project (Ουγγαρία) — redflags.eu («risky does not mean corrupt»).
- Transparency International EU — Integrity Watch.
- ν. 4412/2016 (δημόσιες συμβάσεις), ν. 5090/2024 (τροποποιήσεις ΠΚ), άρθρα 362-363, 367 ΠΚ.
9. Changelog μεθοδολογίας
| Ημερομηνία | Έκδοση | Αλλαγή |
|---|---|---|
| 2026-07-08 | 0.1 | Αρχική έκδοση: ορισμοί δεικτών v1, πηγές, αρχές δημοσίευσης. Κανένας δείκτης δεν έχει δημοσιευθεί ακόμα. |
| 2026-07-08 | 0.2 | Πρώτη υλοποίηση §4.5 (bid-splitting) και §4.6 (discount rate) σε scripts/compute_indicators_v1.py, επί δεδομένων 2020-2021 + 2025-05. §4.5: πίνακας ορίων απευθείας ανάθεσης ανά περίοδο – πριν 1/6/2021: 20.000€ (όλες οι κατηγορίες)· από 1/6/2021 (ν. 4782/2021): 30.000€ προμήθειες/υπηρεσίες, 60.000€ έργα/μελέτες/τεχνικές υπηρεσίες (κατηγοριοποίηση βάσει contractType.value). Χρειάζεται νομική επιβεβαίωση πριν οριστική δημοσίευση (πρώτο πέρασμα βάσει δημόσιας δευτερογενούς πηγής, όχι πρωτογενούς νομικού κειμένου). §4.6: η σύνδεση notice↔contract μέσω contract.noticeReferenceNumber είναι σχεδόν κενή στα δεδομένα (<0.1%, ελέγχθηκε επί 2020-01)· χρησιμοποιείται αντ’ αυτής η σύνδεση notice.referenceNumber ↔ auction.noticeRefNo (κάλυψη: μόνο ~10-18% των auctions έχουν καν noticeRefNo – αναμενόμενο, αφού οι απευθείας αναθέσεις δεν προηγούνται notice) και η τιμή κατακύρωσης (auction) ως proxy της τελικής τιμής σύμβασης αντί της υπογεγραμμένης σύμβασης. Το ποσοστό κάλυψης δημοσιεύεται πάντα δίπλα στον δείκτη. Προστέθηκε επίσης πίνακας κανονικοποίησης φορέων (scripts/build_entity_table.py → data/processed/entities.csv, ΑΦΜ→όνομα/τύπος/NUTS) και static dashboard v1 σκελετός (site/, χωρίς build step, τροφοδοτείται από scripts/build_site_data.py). |
| 2026-07-09 | 0.3 | Pre-release: εφαρμόστηκε το πλάνο του τεχνικού ελέγχου (docs/tech_report.md). Ενιαίος persisted VAT resolver (A3): build_entity_table.py γράφει πλέον data/processed/vat_resolver.csv (name→ΑΦΜ, χτισμένο από auction+contract+notice)· compute_indicators_v1.py και build_foreas_data.py τον διαβάζουν αντί να χτίζουν ο καθένας δικό του (πριν, το build_foreas_data.py χτίζε resolver μόνο από auctions, ~25% ΑΦΜ fill, με αποτέλεσμα ασύμφωνα κλειδιά ΑΦΜ ανάμεσα σε δείκτες και σελίδες προφίλ φορέα). Έλεγχος πληρότητας pagination (A1): το backfill πλέον επαληθεύει totalElements έναντι των πραγματικά κατεβασμένων εγγραφών· ελλιπείς μήνες δεν γράφονται καθόλου (αντί να γράφονται ως “πλήρεις” με λιγότερες γραμμές) και καταγράφονται σε data/raw/_backfill_failures.json για επανάληψη. Η αναδρομική επαλήθευση/διόρθωση του ήδη κατεβασμένου 2020-2023 dataset (audit A1 + γνωστά κενά auction_2020_08, auction_2021_02) εκκρεμεί ακόμα – θα εκτελεστεί σε επόμενο run του backfill_historical.py και οι αριθμοί των δεικτών θα ενημερωθούν τότε αν αλλάξουν. |