You always have a "certain uncertainty" in the case of Elexis, when mapping from informal string storage to formal enumerators. So you have to code defensively, and leave the rest up to e.g. the Database checking tool (dbcheck). Generaly true/false values are stored with ch.elexis.core.constants.StringConstants.ONE .ZERO respectively. So you could just check for those, and in any other case leave it as undefined. 

That is, i think your table mapping is good. One good thing of the value being stored as string is, that we can store an empty string (this would not be possible with an int). So you can use it to represent the not set value.

It would be ok for me if you introduce a method like PersistentObject.getTriStateBoolean() just as there exists a method PersistentObject.getInt(). If you do so, however, prepend this method with @since 3.0.0 to clearify its newliness :)

If you want to have a more close discussion .. contact me via skype :)