The best practice is to HIDE the currently open level once you click on another accordion tab. The reasoning is quite simple:
- Reduce cognitive load: suppose you have
catA-->item1,item2,item3,item(n) open and then you click
catB-->item1,item2,item3,item(n). If you keep catA open, then you're forcing your user to discriminate between the items of different categories, adding a lot of friction and confusion, specially if user opens more than one tab.
- Avoid scrolling: the main reason for accordions is to save space in an otherwise long list of items/content. If you keep the tabs open, you'll be forcing the user to scroll down, making the whole accordion purpose useless
Be aware that if the list is not enough to overflow the boundaries of the screen, it's better to keep all items at sight, unless you need to hide them because of the first reason above: to reduce cognitve load
There's a possible scenario when you may want to keep more than one tab open at the same time: when the user's workflow shows they constantly jump between items of different tabs. While this could be avoided with proper Information Architecture, it's true that sometimes you can't avoid it (like when you inherit an existing system, just as you said) .
In this case, I suggest to have a clearly labeled checkbox where users may choose to keep tabs open. Some sites do this at tab level, as in
CatA-->checkbox,CatB-->checkbox,CatC-->checkbox but in my opinion it's better to go for an "all or nothing approach" and have only one checkbox. If checked, then multiple tabs can be opened at once.