Worth a move from ST?

For this particular contact sensor, are you using the generic zigbee contact sensor driver? If so, are your devices accurately reporting back the their battery levels? I'm getting 100% from both of my contact sensors (this model) even though I know that one of them drained down to zero.

I'm afraid that battery reporting is a "mess" - in other words highly unreliable.
I've had a number of situations where battery is at 67% one day, and the next day the sensor doesn't work because of low battery. I think it's part of what makes it "lithium ion".
The only way around this mess (that I know of) is to use activity reporting as a substitute.
In other words, use one of the community programs (device watchdog, etc.) to report on activity. If the device hasn't reported an activity in the last 1-2 days, then check the battery with a multimeter. I find that the coin cell batteries should be at 3.2V for full battery. If the batter is less than say, 2.95 then it should be replaced.
Another approach: Also, others here have a policy: every 6 months - replace all batteries.

jtmpush18: Thanks for the reply. Currently, I see 100% for the battery level and it doesn't change. One of my sensors is mounted on an outside gate and it stopped working because of a dead battery but Hubitat is showing still 100%. I can only do what you suggested, by running an app that checks if a device hasn't reported in for a certain amount of time.

One last word.
I'm not sure about this, but I think that it's true.
SEnsors that use the bigger batteries - e.g. CR2, or the CR123A the sensors will last longer than the coin cell batteries.
I live in a harsh (i.e. cold) climate which is the enemy of batteries.
Nonetheless, I have some Iris V2 sensors outside (they use the CR2 or the CR123A). They have been outside for months, without an issue.

This is a new contact sensor, and I was surprised that the battery showed 100% but died so quickly (after only 3 weeks). I'm thinking now maybe the original battery had a low battery percentage from the start and I just didn't know it.