you may already know this, but if not:
I’m working on a huge laser cut wall screen for a client- it involves using curve boolean to combine thousands of curves into suitable cutter paths. I was getting failures from the cutter due to self intersecting curves, and viola! Rhino has a solution-
after you run your Booleans, before you export, select all curves and run _testcrvselfintersection
this will place a point on each self intersection allowing you to identify and fix them!