public ProcessingProfile BuildBasicProfile(int timeZoneArtifactId, int folderArtifactId)
        {
            ProcessingProfile profile = new ProcessingProfile
            {
                Name = Constants.Processing.Profile.NAME,
                NumberingSettings =
                    new NumberingSettings
                {
                    DefaultDocumentNumberingPrefix = Constants.Processing.Profile.DEFAULT_DOCUMENT_NUMBERING_PREFIX,
                    NumberOfDigits       = Constants.Processing.Profile.NUMBER_OF_DIGITS4,
                    NumberingType        = Constants.Processing.Profile.NUMBERING_TYPE,
                    ParentChildNumbering = Constants.Processing.Profile.PARENT_CHILD_NUMBERING,
                },
                DeduplicationSettings = new DeduplicationSettings
                {
                    DeduplicationMethod        = Constants.Processing.Profile.DE_DUPLICATION_METHOD,
                    PropagateDeduplicationData = Constants.Processing.Profile.PROPAGATE_DE_DUPLICATION_DATA
                },
                ExtractionSettings =
                    new ExtractionSettings
                {
                    Extractchildren                = Constants.Processing.Profile.EXTRACT_CHILDREN,
                    EmailOutput                    = Constants.Processing.Profile.EMAIL_OUTPUT,
                    ExcelTextExtractionMethod      = Constants.Processing.Profile.EXCEL_TEXT_EXTRACTION_METHOD,
                    ExcelHeaderFooterExtraction    = Constants.Processing.Profile.EXCEL_HEADER_FOOTER_EXTRACTION,
                    PowerPointTextExtractionMethod = Constants.Processing.Profile.POWER_POINT_TEXT_EXTRACTION_METHOD,
                    WordTextExtractionMethod       = Constants.Processing.Profile.WORD_TEXT_EXTRACTION_METHOD,
                    OCR              = Constants.Processing.Profile.OCR,
                    OCRAccuracy      = Constants.Processing.Profile.OCR_ACCURACY,
                    OCRTextSeparator = Constants.Processing.Profile.OCR_TEXT_SEPARATOR
                },
                InventoryDiscoverSettings =
                    new InventoryDiscoverSettings
                {
                    DeNIST              = Constants.Processing.Profile.DE_NIST,
                    DefaultTimeZoneID   = timeZoneArtifactId,
                    DefaultOCRLanguages = Constants.Processing.Profile.DefaultOcrLanguages
                },
                PublishSettings = new PublishSettings
                {
                    AutoPublishSet           = Constants.Processing.Profile.AUTO_PUBLISH_SET,
                    DefaultDestinationFolder = new Relativity.Services.Folder.FolderRef
                    {
                        ArtifactID = folderArtifactId
                    },
                    UseSourceFolderStructure = Constants.Processing.Profile.USE_SOURCE_FOLDER_STRUCTURE
                }
            };

            return(profile);
        }
        //This should cover profile, custodians, processing sets, inventory job, discovery, publish
        public async Task <int> CreateProcessingProfileAsync(int timeZoneArtifactId, int destinationFolderArtifactId, int workspaceArtifactId)
        {
            try
            {
                Console2.WriteDisplayStartLine($"Creating Processing Profile [Name: {Constants.Processing.Profile.NAME}]");

                // Build Basic Processing Profile
                ProcessingProfile processingProfile = BuildBasicProfile(timeZoneArtifactId, destinationFolderArtifactId);

                //Build the ProcessingProfileSaveRequest
                ProcessingProfileSaveRequest processingProfileSaveRequest = new ProcessingProfileSaveRequest
                {
                    ProcessingProfile = processingProfile,
                    WorkspaceId       = workspaceArtifactId
                };

                //Create the ProcessingProfile object. The service returns a ProcessingProfileSaveResponse object.
                ProcessingProfileSaveResponse saveResponse = await ProcessingProfileManager.SaveAsync(processingProfileSaveRequest);

                int processingProfileArtifactId = saveResponse.ProcessingProfileId;
                if (processingProfileArtifactId == 0)
                {
                    throw new Exception("Failed to Create Processing Profile");
                }

                Console2.WriteDebugLine($"Processing Profile ArtifactId: {processingProfileArtifactId}");
                Console2.WriteDisplayEndLine("Created Processing Profile!");

                return(processingProfileArtifactId);
            }
            catch (Exception ex)
            {
                // Error Creating Processing Profile
                throw new Exception("An error occured when creating Processing Profile", ex);
            }
        }