Here's what a non-inverting
* version of the OPAMP solution may look like, for 10V-15V in and 0V-3.3V out.

Design considerations are:
- Choose R1:R2 divider resistors to keep the OPAMP +in voltage within the rails and for acceptable quiescent current in the divider if its going to be permanently connected to a battery
- Choose the OPAMP gain so that in combination with the R1:R2 divider ratio it gives the desired input range to output range scaling factor
- Tweak the R3:R4 divider ratio for the desired offset then R5, R6 for the required gain# , allowing for the Thevenin equivalent resistance of the R3:R4 divider in series with R5
R5 isn't theoretically necessary, as the gain could be purely set by R6 and R3||R4, and there is some flexibility as the R1:R2 input divider ratio can also be varied, but it reduces the constraints on the solution space allowing the use of more readily available resistor values. A high volume design is likely to omit it, but for small runs, possible BOM minimization and reduced design time can justify its inclusion.
Its very similar to fig. 4-8 of "Op Amps For Everyone" Chapter 4 (Rstofer's excellent recommendation), and the equations presented there will be helpful if you wish to attempt a purely analytic solution.
Filtering is likely to be required - add a capacitors across R2 (and possibly R6 as well for a steeper rolloff) for the desired bandwidth.
Finally pick a rail-to-rail output OPAMP with an input bias current at least three orders of magnitude smaller than the R1:R2 divider current, and low enough offset voltage for the required accuracy. Check the voltage range at its inputs will be within its common mode range, and that the max. input current through R1 during fault conditions (e.g HV input transients) or if the OPAMP is powered down will be acceptable.
If the MCU has EEPROM or self-writable FLASH, a production line self-calibration step that applies input voltages at 10% and 90% of the design input range, then calculates and saves the actual scaling factor and offset, may allow the use of lower precision resistors without loss of accuracy.
* Non-inverting: the output increases with increasing input.
# the signal gain is:$$Gain=1+\frac{R6}{R5+R3||R4}$$
Edit: corrected gain equation