Stricter interfaces definitions regarding return (types), exceptions and behaviour. Update classes to adhere to the new interfaces.
Use exceptions for error handling in much more locations. Explicitly note the condition under which a function will and will not throw. Document when a function never throws
Add type declarations
Added logging of errors
Simplified the OCRA implementation by removing the OCRAWrapper classes
Many code quality improvements:
Simplified the OCRA implementation by removing the OCRAWrapper classes