Καταγραφή αποφάσεων για καθαρισμό/διόρθωση δεδομένων ώστε να υπάρχει audit trail.
rawsource data (data/2026_diavgeia.csv) παραμένει ανέγγιχτο όταν το λάθος προέρχεται από τη Διαύγεια.- Οι διορθώσεις εφαρμόζονται σε derived layers (π.χ. filtered CSV, ingest προς DB, reporting).
- Κάθε διόρθωση πρέπει να είναι τεκμηριωμένη και αναπαραγώγιμη.
- Παρατηρήθηκαν περιπτώσεις όπου ποσά στη Διαύγεια είναι καταχωρημένα με λάθος (πιθανό x100), π.χ.:
8.755,24εμφανίζεται ως875.524,0058.752,94εμφανίζεται ως5.875.294,00- Απόφαση:
- Δεν αλλάζουμε το raw
data/2026_diavgeia.csv. - Διορθώσεις θα γίνονται μόνο σε derived layer / ingest με τεκμηριωμένο override ή validator-assisted review.
- Κατάσταση:
- Υπάρχει validator εργαλείο για σύγκριση raw ποσού με parsed PDF text (
src/validate_diavgeia_amounts.py).
- Δημιουργήθηκε notebook-friendly validator για έλεγχο ποσών από raw CSV έναντι parsed PDF text.
- Αρχείο:
src/validate_diavgeia_amounts.py- Σκοπός:
- Exact string match στο PDF text
- Αν όχι, αναζήτηση candidate ποσών με ίδια digits και διαφορετικούς separators
- Σημείωση:
pdf_lookupείναιdict[str, str](ADA -> parsed PDF text), όχι DataFrame.
- Πρόβλημα:
- Σε
ΑΝΑΛΗΨΗ ΥΠΟΧΡΕΩΣΗΣ, κάποια records έχουν άδειοΠοσό και ΚΑΕ/ΑΛΕ, αλλά διαθέτουνΣυνολικό ποσό. - Απόφαση:
- Στο enrichment extraction για commitments, γίνεται fallback στο
Συνολικό ποσό -> Ποσόόταν λείπουν line items. - Υλοποίηση:
src/fetch_diavgeia.py(extract_commitment_fields_from_decision)
- Πρόβλημα:
- Backfill crash από pandas/pyarrow dtypes όταν γίνονται row assignments με lists/dicts/strings.
- Απόφαση:
- Πριν τα enrichment writes, τα enrichment columns γίνονται cast σε
object. - Υλοποίηση:
src/fetch_diavgeia.py(coerce_columns_to_object)
- Πρόβλημα:
- Ορισμένοι φορείς (π.χ. πανεπιστήμια/νοσοκομεία/πολιτιστικοί φορείς) εμφανίζονται από keyword hits αλλά είναι εκτός του επιθυμητού scope της ανάλυσης.
- Απόφαση:
- Διατηρούμε explicit exclusion list με βάση
org_name_clean. - Οι γραμμές αυτές αφαιρούνται από τα datasets και στο εξής απορρίπτονται κατά το fetch/save flow.
- Scope:
raw/filteredCSVs και μελλοντικά fetch batches- Υλοποίηση:
src/fetch_diavgeia.py(EXCLUDED_ORG_NAME_CLEAN_RAW,filter_excluded_org_rows,record_has_excluded_org)
- Πρόβλημα:
- Το KIMDIS raw feed περιέχει αλυσίδες συμβάσεων όπου μια παλιότερη σύμβαση τροποποιείται / επεκτείνεται / αντικαθίσταται από νέα σύμβαση με νέο
referenceNumber. - Αν αθροίζονται όλα τα rows όπως είναι, γίνεται double counting στα ποσά και inflated
contract_count. - Απόφαση:
- Δεν αλλάζουμε το raw
data/raw_procurements.csv. - Στο ingest layer μηδενίζεται το
amount_without_vatγια superseded συμβάσεις: - όταν ένα
referenceNumberεμφανίζεται ωςprevReferenceNoσε νεότερο row - όταν το ίδιο το row έχει μη κενό
nextRefNo - Στα frontend RPCs, οι superseded συμβάσεις εξαιρούνται και από τα counts/lists:
- exclude αν
next_ref_no IS NOT NULL - exclude αν υπάρχει άλλο procurement με
prev_reference_no = reference_number - Scope:
- ingest / DB / frontend
- Υλοποίηση:
ingest/stage2_load_erd.pysql/contracts_page_rpc.sqlsql/021_region_contracts_rpc.sqlsql/024_municipality_contracts_rpc.sqlsql/featured_records_rpc.sqlsql/hero_section_rpc.sql
- Πρόβλημα:
- Regional organizations όπως ο
ΑΟΠΙΝπρέπει να εμφανίζονται ως organizations μεauthority_scope='region', όχι να υποβιβάζονται σε canonical region rows. - Όταν λείπει το
organization_key, τα RPCs πέφτουν σε region fallback labels όπωςΠΕΡΙΦΕΡΕΙΑ ΙΟΝΙΩΝ ΝΗΣΩΝ. - Απόφαση:
- Στο organization seeding αποκλείονται μόνο canonical δήμοι / canonical περιφέρειες.
- Δεν αποκλείονται organizations μόνο και μόνο επειδή το
authority_scopeτους είναιregionήdecentralized. - Scope:
- ingest / DB / frontend display
- Υλοποίηση:
ingest/stage2_load_erd.py(seed_organization_rows)scripts/backfill_procurement_geography.py
- Προσθήκη manual override registry για ποσά (π.χ.
ADA -> corrected amount) σε separate CSV/YAML. - Εφαρμογή overrides στο ingest προς
procurement_decisions.amount_eur. - Προαιρετικά: αποθήκευση
amount_raw_text,amount_corrected,correction_reasonστη βάση.
- Πρόσθεσε νέα απόφαση με:
ProblemDecisionScope(raw / filtered / ingest / DB / frontend)Implementation(file/function)Date