The main reason to have distinct types is the "natural" hierarchy of the records (it's a big tree), for example, the 'C' block is roughly as follows:
C001
- C100
  - C101
  - C105
  - C110
    - C111
    - C112
    - C113
    - C114
    - C115
    - C116
  - C120
  - C130
  - C140
    - C141
  - C160
  - C165
  - C170
    - C171
    - C172
    - C173
    - C174
    - C175
    - C176
    - C177
    - C178
    - C179
  - C180
    - C185
  - C190
    - C191
    - C195
    - C197
- C300
  - C310
  - C320
    - C321
  - C330
  - C350
  - C370
  - C380
  - C390
- C400
  - C405
  - C410
  - C420
    - C425
  - C430
  - C460
    - C465
  - C470
  - C480
  - C490
- C495
- C500
  - C510
  - C590
    - C591
    - C595
    - C597
- C600
  - C601
  - C610
  - C690
- C700
  - C790
    - C791
- C800
  - C810
    - C815
  - C850
- C860
  - C870
    - C880
  - C890
C990
There is more blocks that form the whole document (or tree), Blocks: 0, B, C, D, E, G, H, K, I, 9
The idea is to parse the document and implement manipulation functions to edit the content and later export in other formats