public static async Task Run([BlobTrigger("parseddocuments/w2/{name}", Connection = "Documents")] CloudBlockBlob parsedBlob, [Blob("parseddocuments", Connection = "Documents")] CloudBlobContainer blobDirectory, [Blob("rawdocuments/{name}", FileAccess.Read)] Stream originalImage, [Blob("parseddocuments/markedup/{name}", FileAccess.ReadWrite)] CloudBlockBlob markedUpImage, ILogger log, Microsoft.Azure.WebJobs.ExecutionContext context, CancellationToken cancellationToken) { try { MortgageApplicationDocument mortgageApplicationDocument = new MortgageApplicationDocument(); mortgageApplicationDocument.PopuplateFromBlobProperties(parsedBlob); mortgageApplicationDocument.HasParsedResults = true; mortgageApplicationDocument.DocumentType = "w2"; string jsonContents = await parsedBlob.DownloadTextAsync(); ProcessedDocument document = JsonConvert.DeserializeObject <ProcessedDocument>(jsonContents); CloudBlockBlob finalBlob = blobDirectory.GetBlockBlobReference(parsedBlob.Name.Replace("w2/", "final/")); mortgageApplicationDocument.Status = MortgageApplicationStatus.Processed; mortgageApplicationDocument.DateProcessed = DateTimeOffset.UtcNow; mortgageApplicationDocument.SetBlobProperties(finalBlob); FindDataLine(document, "SSN", "Social Security Number", mortgageApplicationDocument, "a. Employee's social security number", "social security number", "Employee's soc. sec. number", "Employee's social security number"); FindMoneyLine(document, "Wages", "Total Wages", mortgageApplicationDocument, "Wages"); FindMoneyLine(document, "FedTax", "Federal Tax Witholding", mortgageApplicationDocument, "2. Federal income tax", "Federal income tax withheld"); FindDataLine(document, "CopyType", "Copy Type", mortgageApplicationDocument, "Copy"); FindMoneyLine(document, "SocialSecurityWage", "Social Security Wage", mortgageApplicationDocument, "Social security wages"); FindMoneyLine(document, "SocialSecurityTax", "Social Security Tax", mortgageApplicationDocument, "Social security tax withheld"); FindMoneyLine(document, "MedicareWage", "Medicare Wage", mortgageApplicationDocument, "Medicare wages and tips"); FindMoneyLine(document, "MedicareTax", "Medicare Tax", mortgageApplicationDocument, "Medicare tax withheld"); FindMoneyLine(document, "SocialSecurityTips", "Social Security Tips", mortgageApplicationDocument, "Social security tips"); FindDataLine(document, "EmployerDetails", "Employer Details", mortgageApplicationDocument, "Employer's name, address, and ZIP code"); FindDataLine(document, "EmployeeDetails", "Employee Details", mortgageApplicationDocument, "Employee's first name and initial", "Last name", "Employee's name, address, and ZIP code", "Employee's name (first, middle indial, last)"); await finalBlob.UploadTextAsync(JsonConvert.SerializeObject(mortgageApplicationDocument)); await MarkupService.HighlightHits(document, originalImage, markedUpImage); } catch (Exception ex) { log.LogError(ex, "W2 Processor Failed"); } }