github.com/moov-io/imagecashletter@v0.10.1/cmd/writeImageCashLetter/main.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "flag" 6 "fmt" 7 "log" 8 "os" 9 "path/filepath" 10 "runtime/pprof" 11 "strconv" 12 "time" 13 14 "github.com/moov-io/imagecashletter" 15 ) 16 17 var ( 18 fPath = flag.String("fPath", "", "File Path") 19 cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") 20 21 // output formats 22 flagJson = flag.Bool("json", false, "Output file in json") 23 ) 24 25 // main creates an ICL File with 2 CashLetters 26 // Each CashLetter contains 2 Bundles, with 100 CheckDetails 27 func main() { 28 flag.Parse() 29 30 filename := time.Now().UTC().Format("200601021504") 31 if *flagJson { 32 filename += ".json" 33 } else { 34 filename += ".icl" 35 } 36 37 path := filepath.Join(*fPath, filename) 38 write(path) 39 } 40 41 func write(path string) { 42 if *cpuprofile != "" { 43 f, err := os.Create(*cpuprofile) 44 if err != nil { 45 log.Fatal(err) 46 } 47 pprof.StartCPUProfile(f) 48 defer pprof.StopCPUProfile() 49 } 50 51 f, err := os.Create(path) 52 if err != nil { 53 fmt.Printf("%T: %s", err, err) 54 } 55 56 // To create a file 57 fh := imagecashletter.NewFileHeader() 58 fh.StandardLevel = "35" 59 fh.TestFileIndicator = "T" 60 fh.ImmediateDestination = "231380104" 61 fh.ImmediateOrigin = "121042882" 62 fh.FileCreationDate = time.Now() 63 fh.FileCreationTime = time.Now() 64 fh.ResendIndicator = "N" 65 fh.ImmediateDestinationName = "Citadel" 66 fh.ImmediateOriginName = "Wells Fargo" 67 fh.FileIDModifier = "" 68 fh.CountryCode = "US" 69 fh.UserField = "" 70 fh.CompanionDocumentIndicator = "" 71 72 file := imagecashletter.NewFile() 73 file.SetHeader(fh) 74 75 // Create 4 CashLetters 76 for i := 0; i < 4; i++ { 77 78 count := strconv.Itoa(i + 1) 79 // cashLetterHeader 80 clh := imagecashletter.NewCashLetterHeader() 81 clh.CollectionTypeIndicator = "01" 82 clh.DestinationRoutingNumber = "231380104" 83 clh.ECEInstitutionRoutingNumber = "121042882" 84 clh.CashLetterBusinessDate = time.Now() 85 clh.CashLetterCreationDate = time.Now() 86 clh.CashLetterCreationTime = time.Now() 87 clh.RecordTypeIndicator = "I" 88 clh.DocumentationTypeIndicator = "G" 89 clh.CashLetterID = "A" + count 90 clh.OriginatorContactName = "Contact Name" 91 clh.OriginatorContactPhoneNumber = "5558675552" 92 clh.FedWorkType = "" 93 clh.ReturnsIndicator = "" 94 clh.UserField = "" 95 cl := imagecashletter.NewCashLetter(clh) 96 97 for y := 0; y < 2; y++ { 98 { 99 // Create Bundle 100 bcount := strconv.Itoa(i + y) 101 bh := imagecashletter.NewBundleHeader() 102 bh.CollectionTypeIndicator = "01" 103 bh.DestinationRoutingNumber = "231380104" 104 bh.ECEInstitutionRoutingNumber = "121042882" 105 bh.BundleBusinessDate = time.Now() 106 bh.BundleCreationDate = time.Now() 107 bh.BundleID = "B" + bcount 108 bh.BundleSequenceNumber = bcount 109 bh.CycleNumber = "01" 110 bh.UserField = "" 111 bundle := imagecashletter.NewBundle(bh) 112 113 for z := 0; z < 100; z++ { 114 cdCount := strconv.Itoa(z + 1) 115 116 // Create Check Detail 117 cd := imagecashletter.NewCheckDetail() 118 cd.AuxiliaryOnUs = "123456789" 119 cd.ExternalProcessingCode = "" 120 cd.PayorBankRoutingNumber = "03130001" 121 cd.PayorBankCheckDigit = "2" 122 cd.OnUs = "5558881" 123 cd.ItemAmount = 100000 // 1000.00 124 cd.EceInstitutionItemSequenceNumber = cdCount 125 cd.DocumentationTypeIndicator = "G" 126 cd.ReturnAcceptanceIndicator = "D" 127 cd.MICRValidIndicator = 1 128 cd.BOFDIndicator = "Y" 129 cd.AddendumCount = 3 130 cd.CorrectionIndicator = 0 131 cd.ArchiveTypeIndicator = "B" 132 133 cdAddendumA := imagecashletter.NewCheckDetailAddendumA() 134 cdAddendumA.RecordNumber = 1 135 cdAddendumA.ReturnLocationRoutingNumber = "121042882" 136 cdAddendumA.BOFDEndorsementDate = time.Now() 137 cdAddendumA.BOFDItemSequenceNumber = cdCount 138 cdAddendumA.BOFDAccountNumber = "938383" 139 cdAddendumA.BOFDBranchCode = "01" 140 cdAddendumA.PayeeName = "Test Payee" 141 cdAddendumA.TruncationIndicator = "Y" 142 cdAddendumA.BOFDConversionIndicator = "1" 143 cdAddendumA.BOFDCorrectionIndicator = 0 144 cdAddendumA.UserField = "" 145 146 cdAddendumB := imagecashletter.NewCheckDetailAddendumB() 147 cdAddendumB.ImageReferenceKeyIndicator = 1 148 cdAddendumB.MicrofilmArchiveSequenceNumber = "1A " 149 cdAddendumB.LengthImageReferenceKey = "0034" 150 cdAddendumB.ImageReferenceKey = "0" 151 cdAddendumB.Description = "CD Addendum B" 152 cdAddendumB.UserField = "" 153 154 cdAddendumC := imagecashletter.NewCheckDetailAddendumC() 155 cdAddendumC.RecordNumber = 1 156 cdAddendumC.EndorsingBankRoutingNumber = "121042882" 157 cdAddendumC.BOFDEndorsementBusinessDate = time.Now() 158 cdAddendumC.EndorsingBankItemSequenceNumber = "1 " 159 cdAddendumC.TruncationIndicator = "Y" 160 cdAddendumC.EndorsingBankConversionIndicator = "1" 161 cdAddendumC.EndorsingBankCorrectionIndicator = 0 162 cdAddendumC.ReturnReason = "A" 163 cdAddendumC.UserField = "" 164 cdAddendumC.EndorsingBankIdentifier = 0 165 166 ivDetail := imagecashletter.NewImageViewDetail() 167 ivDetail.ImageIndicator = 1 168 ivDetail.ImageCreatorRoutingNumber = "031300012" 169 ivDetail.ImageCreatorDate = time.Now() 170 ivDetail.ImageViewFormatIndicator = "00" 171 ivDetail.ImageViewCompressionAlgorithm = "00" 172 // use of ivDetail.ImageViewDataSize is not recommended 173 ivDetail.ImageViewDataSize = "0000000" 174 ivDetail.ViewSideIndicator = 0 175 ivDetail.ViewDescriptor = "00" 176 ivDetail.DigitalSignatureIndicator = 0 177 ivDetail.DigitalSignatureMethod = "00" 178 ivDetail.SecurityKeySize = 00000 179 ivDetail.ProtectedDataStart = 0000000 180 ivDetail.ProtectedDataLength = 0000000 181 ivDetail.ImageRecreateIndicator = 0 182 ivDetail.UserField = "" 183 ivDetail.OverrideIndicator = "0" 184 185 ivData := imagecashletter.NewImageViewData() 186 ivData.EceInstitutionRoutingNumber = "121042882" 187 ivData.BundleBusinessDate = time.Now() 188 ivData.CycleNumber = "1" 189 ivData.EceInstitutionItemSequenceNumber = "1 " 190 ivData.SecurityOriginatorName = "Sec Orig Name" 191 ivData.SecurityAuthenticatorName = "Sec Auth Name" 192 ivData.SecurityKeyName = "SECURE" 193 ivData.ClippingOrigin = 0 194 ivData.ClippingCoordinateH1 = "" 195 ivData.ClippingCoordinateH2 = "" 196 ivData.ClippingCoordinateV1 = "" 197 ivData.ClippingCoordinateV2 = "" 198 ivData.LengthImageReferenceKey = "0000" 199 ivData.ImageReferenceKey = "" 200 ivData.LengthDigitalSignature = "0 " 201 ivData.DigitalSignature = []byte("") 202 ivData.LengthImageData = "0000001" 203 ivData.ImageData = []byte("") 204 205 ivAnalysis := imagecashletter.NewImageViewAnalysis() 206 ivAnalysis.GlobalImageQuality = 2 207 ivAnalysis.GlobalImageUsability = 2 208 ivAnalysis.ImagingBankSpecificTest = 0 209 ivAnalysis.PartialImage = 2 210 ivAnalysis.ExcessiveImageSkew = 2 211 ivAnalysis.PiggybackImage = 2 212 ivAnalysis.TooLightOrTooDark = 2 213 ivAnalysis.StreaksAndOrBands = 2 214 ivAnalysis.BelowMinimumImageSize = 2 215 ivAnalysis.ExceedsMaximumImageSize = 2 216 ivAnalysis.ImageEnabledPOD = 1 217 ivAnalysis.SourceDocumentBad = 0 218 ivAnalysis.DateUsability = 2 219 ivAnalysis.PayeeUsability = 2 220 ivAnalysis.ConvenienceAmountUsability = 2 221 ivAnalysis.AmountInWordsUsability = 2 222 ivAnalysis.SignatureUsability = 2 223 ivAnalysis.PayorNameAddressUsability = 2 224 ivAnalysis.MICRLineUsability = 2 225 ivAnalysis.MemoLineUsability = 2 226 ivAnalysis.PayorBankNameAddressUsability = 2 227 ivAnalysis.PayeeEndorsementUsability = 2 228 ivAnalysis.BOFDEndorsementUsability = 2 229 ivAnalysis.TransitEndorsementUsability = 2 230 231 // Add CheckDetailAddendum* to CheckDetail 232 cd.AddCheckDetailAddendumA(cdAddendumA) 233 cd.AddCheckDetailAddendumB(cdAddendumB) 234 cd.AddCheckDetailAddendumC(cdAddendumC) 235 236 // Add ImageView* to CheckDetail 237 cd.AddImageViewDetail(ivDetail) 238 cd.AddImageViewData(ivData) 239 cd.AddImageViewAnalysis(ivAnalysis) 240 241 // Add CheckDetail to Bundle 242 bundle.AddCheckDetail(cd) 243 } 244 cl.AddBundle(bundle) 245 } 246 } 247 cl.Create() 248 file.AddCashLetter(cl) 249 } 250 251 // ensure we have a validated file structure 252 if file.Validate(); err != nil { 253 fmt.Printf("Could not validate entire file: %v", err) 254 } 255 256 // Create the file 257 if err := file.Create(); err != nil { 258 fmt.Printf("%T: %s", err, err) 259 } 260 261 // Write to a file 262 if *flagJson { 263 // Write in JSON format 264 if err := json.NewEncoder(f).Encode(file); err != nil { 265 fmt.Printf("%T: %s", err, err) 266 } 267 } else { 268 // Write in ICL plain text format 269 opts := []imagecashletter.WriterOption{ 270 imagecashletter.WriteVariableLineLengthOption(), 271 imagecashletter.WriteEbcdicEncodingOption(), 272 } 273 w := imagecashletter.NewWriter(f, opts...) 274 if err := w.Write(file); err != nil { 275 fmt.Printf("%T: %s", err, err) 276 } 277 w.Flush() 278 } 279 280 if err := f.Close(); err != nil { 281 fmt.Println(err.Error()) 282 } 283 284 fmt.Printf("Wrote %s\n", path) 285 286 }