Are you sure about:

Property PatientId As %Stream.FileCharacter;
Property PatientName As %Stream.FileCharacter;

Both of these fields are less than 3 641 144 characters in size, so

Property PatientId As %VarString;
Property PatientName As %VarString;

Would probably work.

You can add ToStream() method to your class to provide serialization, if you need to (Or just add JSON or XML adaptors to generate XML or JSON (de)serializations automatically).

It's not a file property. Docx is just a zip archive, inside it is docProps/app.xml file. Here's how it looks like:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties>
    <TotalTime>4</TotalTime>
    <Pages>8</Pages>
    <Words>1882</Words>
    <Characters>10731</Characters>
    <Application>Microsoft Office Word</Application>
    <Lines>89</Lines>
    <Paragraphs>25</Paragraphs>
    <CharactersWithSpaces>12588</CharactersWithSpaces>
</Properties>

Explorer reads the app.xml file and gets information from it.

You can do the same I suppose, here's an article on that.

In your case you don't want to unpack the whole docx, check this unzip implementation for ObjectScript.