Ошибка в том, что цикл должен начинаться с 1, а не с 0.
for i := 0 to length(num) do...
should be
for i := 1 to length(num) do
Строки Паскаля имеют первый байт, содержащий длину строки.
другими словами, num [0] содержит значение 4 (длина строки 4 символа), которое дает -44 после вычитания 48, отбрасывая ожидаемое значение суммы.
Итак, ваша программа выполняет итерации по следующим значениям
4 --> -48 = -44
56 --> -48 = 8
56 --> -48 = 8
56 --> -48 = 8
56 --> -48 = 8
sum = -12
Также, как предложено в других ответах, используйте функцию Ord (), а не приведение к Integer, то есть используйте
value := Ord(num[i]) - 48;
or even better,
value := Ord(num[i]) - Ord('0');