Σε ένα πληροφοριακό σύστημα είναι εύκολο να θεωρήσουμε ότι οι αριθμοί είναι απλώς αριθμοί. Αν κάποιος έχει 1.000 μετοχές, αποθηκεύουμε 1.000. Και αν μετά από μια εταιρική πράξη δικαιούται 1.125,375, αποθηκεύουμε 1.125,375;
Και κάπου εκεί αρχίζουν τα πραγματικά προβλήματα. Στις κεφαλαιαγορές, το ερώτημα δεν είναι μόνο «πόσο βγαίνει ο υπολογισμός;». Είναι «τι σημαίνει επιχειρησιακά το δεκαδικό αποτέλεσμα». Ας υποθέσουμε ότι μια εταιρεία πραγματοποιεί μια εταιρική πράξη με αναλογία 3 νέες μετοχές για κάθε 8 παλαιές. Και έστω ένας μέτοχος που κατέχει 101 μετοχές. Ο μαθηματικός υπολογισμός είναι απλός: ((101 × 3) / 8) = 37,875. Ο μέτοχος όμως τελικά τι θα πάρει; 37 μετοχές; 38 μετοχες; 37 μετοχές και χρηματικό αντίτιμο για το 0,875; Θα συγκεντρωθούν τα κλασματικά υπόλοιπα όλων των μετόχων και θα πωληθούν; Επιτρέπεται η κατοχή fractional shares στο συγκεκριμένο περιβάλλον; Και σε ποιο ακριβώς στάδιο του υπολογισμού γίνεται η στρογγυλοποίηση;
Αυτές δεν είναι ερωτήσεις μαθηματικών. Είναι business rules. Και εδώ βρίσκεται μία από τις μεγαλύτερες παγίδες στον σχεδιασμό financial software: ο developer βλέπει έναν decimal αριθμό. Το business βλέπει δικαιώματα, χρήματα και υποχρεώσεις.
Το ίδιο πρόβλημα εμφανίζεται στα μερίσματα. Αν ένας μέτοχος δικαιούται μικτό μέρισμα €0,1375 ανά μετοχή και κατέχει 1.003 μετοχές, το αποτέλεσμα είναι €137,9125. Τι πληρώνουμε; €137,91 ή €137,92; Και ακόμη σημαντικότερο: πότε γίνεται η στρογγυλοποίηση; Ανά μέτοχο; Ανά λογαριασμό; Ανά θέση; Ανά transaction; Στο μικτό ποσό; Μετά τον φόρο; Στο τελικό πληρωτέο ποσό; Η διαφορά μπορεί να είναι ένα λεπτό. Κια ένα λεπτό δεν ακούγεται σημαντικό. Πολλαπλασίασέ το όμως επί εκατοντάδες χιλιάδες εγγραφές και ξαφνικά το «ασήμαντο» rounding difference μετατρέπεται σε reconciliation difference που κάποιος πρέπει να εξηγήσει.
Και εκεί εμφανίζεται ένα ακόμη δύσκολο ερώτημα: Ποιος πρέπει να κερδίσει από τη στρογγυλοποίηση; Ο μέτοχος; Η εταιρεία; Ο ενδιάμεσος φορέας; Κανείς; Η σωστή απάντηση δεν πρέπει να βρίσκεται κρυμμένη σε μια γραμμή κώδικα τύπου Round(value, 2). Πρέπει να αποτελεί ρητό, τεκμηριωμένο και ελεγχόμενο επιχειρηματικό κανόνα.
Έχω μάθει να αντιμετωπίζω με ιδιαίτερη καχυποψία λέξεις όπως η λέξη «απλώς» όταν χρησιμοποιούνται σε financial systems. Όπως λόγου χαρη «Απλώς κάνε μια στρογγυλοποίηση.» «Απλώς κόψε τα δεκαδικά.» «Απλώς μοίρασε το συνολικό ποσό στους μετόχους.» Συνήθως πίσω από αυτό το «απλώς» κρύβεται η πραγματική πολυπλοκότητα του συστήματος. Υπάρχει μάλιστα και μία δεύτερη διάσταση. Το συνολικό αποτέλεσμα πρέπει συχνά να συμφωνεί με το άθροισμα των επιμέρους αποτελεσμάτων. Αν διαθέτεις δηλαδή ένα €1.000.000 προς διανομή και οι υπολογισμοί ανά δικαιούχο, μετά τις στρογγυλοποιήσεις, αθροίζουν σε €999.997,63, τα €2,37 δεν μπορούν να εξαφανιστούν επειδή «έτσι προέκυψε από τον αλγόριθμο!». Το σύστημα πρέπει να ξέρει τι θα τα κάνει.
Αυτό είναι το σημείο όπου ένα απλό calculation engine μετατρέπεται σε πραγματικό corporate actions system. Χρειάζεται precision policy, rounding rules, residual handling, reconciliation, auditability και δυνατότητα να εξηγήσει εκ των υστέρων γιατί ένας συγκεκριμένος επενδυτής έλαβε ακριβώς το ποσό που έλαβε.
Και αυτό το τελευταίο είναι ίσως το σημαντικότερο. Σε ένα κρίσιμο χρηματοοικονομικό σύστημα δεν αρκεί να παράγεις το σωστό αποτέλεσμα. Πρέπει να μπορείς να αποδείξεις πώς το παρήγαγες. Γι' αυτό πολλές φορές η πραγματική πολυπλοκότητα των Capital Markets δεν βρίσκεται στα εκατομμύρια. Βρίσκεται στο 0,001.
