I think the standard is with Set Event Data, Get Event Info.
The weapon sets the data into a “package” and the receiver picks up the info to process it. It should normally be near instantaneous with no problems. But when the health FSM is a huge labyrinth of states, then it takes a bit more.
Use Start state to initialise everything, reset health, load from data container etc. Then put the logic for taking damage in a single standalone state, with your own custom “on hit” global event (sent by your weapons, set with set event info in their damage dealing FSM ).
On hit, get event info, get damageReceived variable, substract from health, then null damageReceived (since it was processed). And that’s it. Put a finished event there, and have it go to an empty “done” state, so you see it did the thing. With debug mode on, you can also count how often it gets there.
Where done is now, you can then add the checks and compare logic to set off hit animation, check if you’re dead etc. Our you can make it more modular which is generally better.