Почему getBoundingClientRect считает не правильно высоту?
Вы родителю .item присваиваете высоту .hidden. Там ещё label рядом лежит, у которого своя высота есть + бордер + маргин. Замените 70 в расчёте h на высоту лейбла + его нижний маргин, и логика будет правильной. А ещё лучше просто сделайте так: let h = parent.scrollHeight;
Скрытые элементы браузер не рендерит, поэтому размер у такого элементы не узнать.
У вас не вся высота - видимо потому, что в момент работы getBoundingClientRect() - элемент виден именно на столько...

Решение зависит от конкретной ситуации.
Я обычно позиционирую элемент абсолютно за экраном - меряю его высоту, и возвращаю на место...