```ts
export function soundexCode(word: string): string {
  if (typeof word !== 'string' || !/^[a-zA-Z]+$/.test(word)) {
    throw new Error('Input must be a non-empty string containing only ASCII letters.');
  }

  const vowels = new Set(['a', 'e', 'i', 'o', 'u', 'y', 'h', 'w']);
  let result = word[0].toUpperCase();

  for (let i = 1; i < word.length; i++) {
    const char = word[i];
    if (!vowels.has(char.toLowerCase())) {
      let digit = '';
      switch (char) {
        case 'b':
        case 'f':
        case 'p':
        case 'v':
          digit = '1';
          break;
        case 'c':
        case 'g':
        case 'j':
        case 'k':
        case 'q':
        case 's':
        case 'x':
        case 'z':
          digit = '2';
          break;
        case 'd':
        case 't':
          digit = '3';
          break;
        case 'l':
          digit = '4';
          break;
        case 'm':
        case 'n':
          digit = '5';
          break;
        case 'r':
          digit = '6';
          break;
      }

      if (result[result.length - 1] !== digit) {
        result += digit;
      }
    }
  }

  while (result.length < 4) {
    result += '0';
  }

  return result.slice(0, 4);
}
```