The last piece you need to develop is your Manifest Header. This header is like your calling card to the government. Here, you will introduce yourself, provide your secret code (UUID), give over the name of your Data Form File as well as its secret code called checksum and its byte size. A lot of this is part of the security feature.
To actually create the Manifest Header, go over to this Stack Overflow site where somebody has been kind enough to post their Manifest Header code that passed the government testing. Most of the code you will need. The only piece that I can recall that we do not need is the part about the signature. The single biggest change for 2017 and 2018 processing year is the namespace, so after you download the code from the Stack Overflow site, change the namespace to the following:
<p:ACAUIBusinessHeader xmlns:p="urn:us:gov:treasury:irs:msg:acauibusinessheader" xmlns:acaBusHeader="urn:us:gov:treasury:irs:msg:acabusinessheader" xmlns="urn:us:gov:treasury:irs:ext:aca:air:ty17" xmlns:irs="urn:us:gov:treasury:irs:common" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:us:gov:treasury:irs:msg:acauibusinessheader IRS-ACAUserInterfaceHeaderMessage.xsd ">
Surprisingly, the prefixes didn't change in the Manifest Header.
Most of this Manifest Header will remain the same from transmission to transmission. The parts you will consistently change are: the name of your Data Form file, its checksum, its byte size (not size on disk), the UUID, and the timestamp.
First, do your Data Form file and save it before doing the Manifest Header. Note the date and time of the Data Form file as you will most likely use them as part of the naming convention (it is highly suggested that you follow the government'sĀ convention because I think it makes it easier for the help desk folks and the folks proofreading your tests to find your file). Towards the bottom of the Manifest Header, there will be a field that pertains to the name of the Data Form file: DocumentSystemFileNm. Also at the bottom you will find fields to add in the checksum and the byte size.
To do the checksum, go to my ACA Update post - I think I wrote about what to do to get the checksum of your Data Form. In case I didn't, I will say you need to go into the DOS cmd and type CertUtil -hashfile c:......filename.xml MD5. (For tax year 2017, the checksum is performed as CertUtil -hashfile c:......filename.xml SHA256.) Space between CertUtil and the hyphen is required. And MD5 (SHA256 for tax year 2017) is required.
Also, in the same post, there should be instructions on how to generate the UUID. You basically go into the DOS cmd and type powershell -Command "[guid]::NewGuid()". That UUID is entered in the field UniqueTransmissionId. Be sure to read the government's guideline to understand what makes up this UniqueTransmissionId because it is actually composed of multiple things, not just the UUID.
The last thing you want to add to the Manifest Header is the timestamp, just before you upload the files to the government site. I know that for the A2A channel, you do not want to send beyond 10 minutes after your timestamp, so I imagine there is the same time limit on the UI side.
Once you have created your Manifest Header, test it against IRS-ACAUserInterfaceHeaderMessage.xsd (this is part of the schema files that you downloaded from the government site - most likely sitting in the MSG folder). If your Manifest Header doesn't pass, your entire transmission is rejected.
Okay, enough. This should get you started.
Final word: if after reading all of this you still find this too much, there is a guy who has developed a software that appears to be able to convert everything into the proper XML format. I don't know him but we've been "talking" via emails and his approach looks good. His website is at www.acasolutionsusa.com.