A simple function can do this...

[{"id":"49c22b709472f98b","type":"function","z":"f9687f620c582b41","name":"calibrate","func":"const offset = -15;\nconst original = msg.payload.heading;\nlet calibrated = original + offset;\nif (calibrated < 0) calibrated = 360 + calibrated;\nif (calibrated > 360) calibrated = calibrated - 360;\nmsg.payload.calibrated = calibrated;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1560,"y":1280,"wires":[["627cbd8f80ae18d3"]]},{"id":"95f3866760b7a46f","type":"inject","z":"f9687f620c582b41","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"heading\": 5}","payloadType":"json","x":1350,"y":1280,"wires":[["49c22b709472f98b"]]},{"id":"2388318e5db274cc","type":"inject","z":"f9687f620c582b41","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"heading\": 30}","payloadType":"json","x":1360,"y":1320,"wires":[["49c22b709472f98b"]]},{"id":"7c316fca509f5a1f","type":"inject","z":"f9687f620c582b41","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"heading\": 350}","payloadType":"json","x":1360,"y":1360,"wires":[["49c22b709472f98b"]]},{"id":"627cbd8f80ae18d3","type":"debug","z":"f9687f620c582b41","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"info","statusType":"auto","x":1750,"y":1280,"wires":[]}]
Use CTRL+I to import this demo flow ↑