Some comments below. (in parentheses)
I’ve done similar with KeyHoles, but I used G91 mode, so I could just jog to the location I wanted the slot and run the code from there.
G90
G21
G0 X0.000 Y0.000
G0 Z0.0 F200.0 (G0 is a rapid move, feedrate not needed. I wouldn't rapid to Z0 anyway)
G1 Z-3.000 F200.0
G1 Z-0.000 F200.0
G1 Z-6.000 F200.0
G1 Z-0.000 F200.0
G1 Z-9.000 F200.0
G1 Z-0.000 F200.0
G1 Z-10.000 F200.0
G1 X0.000 Y3.000 F200.0 (G1, X0, & F200 are redundant, but doesn't affect anything really)
G1 X0.000 Y0.000 F200.0 (Feed seems really slow?)
G1 X0.000 Y6.000 F200.0
G1 X0.000 Y0.000 F200.0
G1 X0.000 Y9.000 F200.0
G1 X0.000 Y0.000 F200.0
G1 X0.000 Y12.000 F200.0
G1 X0.000 Y0.000 F200.0
G1 X0.000 Y15.000 F200.0
G21 (not needed)
G90 (not needed)
G0 X0.000 Y0.000 (You're 15mm up the keyole. I wouldn't rapid move here)
G1 Z15.000 F200.0 (This a retract to Z15, you mentioned you wanted to move to Z5)
M02
It will run in mm mode as you set the G21 and never changed that.