Single-roll battle decision was meant to speed up physical play and required tables. In our context it isn't necessary but I've still used it. I don't remember how exactly I did it back then and thought of something new.
This is the procedure for casualty calculation:

Every connection between provinces has a "Width" or "Frontage" value; terrain comes already built-in with this feature. The system works so that the only way to employ a numerical advantage, other than several turns of attrition warfare, is to outflank the enemy. During a player's turn -for now I thought of this for player by player rather than simultaneous movement- he commands a certain number of attacking units against an enemy province. He counts the following values:
-The outcome of a d100 roll (0 is the best result for defender, 100 for attacker)
-Total Attacker Strength (TAS)
-Total Defender Strength (TDS)
-Total Frontage (F) in province connections
(There are cases where there's a lot of total frontage but the attacker doesn't have the units in the right provinces, that changes the procedure, but assume it's not for now)

Compare TAS and F.
TAS>F, F = Committed Attacker Strength (CAS).
TAS M+O, Defender Casualties = (M+O)*CDS

Compare (100-Dice) vs. M+O
(100-1d100)  M+O, Attacker Casualties = (100-M+O)*CAS