Complete weekly reconciliation review workflow

This commit is contained in:
John Mulhall 2026-10-07 08:01:08 -04:00
parent 667ecd808c
commit c389271cde
4 changed files with 234 additions and 67 deletions

View file

@ -11,8 +11,8 @@
DTS:LocaleID="1033" DTS:LocaleID="1033"
DTS:ObjectName="ManualReviewExport" DTS:ObjectName="ManualReviewExport"
DTS:PackageType="5" DTS:PackageType="5"
DTS:VersionBuild="33" DTS:VersionBuild="34"
DTS:VersionGUID="{98FD7D14-0AA2-476F-B1F7-2762A8541125}"> DTS:VersionGUID="{09CBCBA0-EDAF-4ED0-B21D-D9F7486039D0}">
<DTS:Property <DTS:Property
DTS:Name="PackageFormatVersion">8</DTS:Property> DTS:Name="PackageFormatVersion">8</DTS:Property>
<DTS:ConnectionManagers> <DTS:ConnectionManagers>
@ -38,7 +38,7 @@
<DTS:ConnectionManager <DTS:ConnectionManager
DTS:ConnectRetryCount="0" DTS:ConnectRetryCount="0"
DTS:ConnectRetryInterval="0" DTS:ConnectRetryInterval="0"
DTS:ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties=&quot;EXCEL 12.0 XML;HDR=YES&quot;;" /> DTS:ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties=&quot;EXCEL 12.0 XML;HDR=YES&quot;;" />
</DTS:ObjectData> </DTS:ObjectData>
</DTS:ConnectionManager> </DTS:ConnectionManager>
<DTS:ConnectionManager <DTS:ConnectionManager
@ -61,7 +61,7 @@
<DTS:ObjectData> <DTS:ObjectData>
<DTS:ConnectionManager <DTS:ConnectionManager
DTS:FileUsageType="1" DTS:FileUsageType="1"
DTS:ConnectionString="S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx" /> DTS:ConnectionString="\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx" />
</DTS:ObjectData> </DTS:ObjectData>
</DTS:ConnectionManager> </DTS:ConnectionManager>
</DTS:ConnectionManagers> </DTS:ConnectionManagers>
@ -79,12 +79,12 @@
DTS:CreationName="" DTS:CreationName=""
DTS:DTSID="{B4CCCD0F-2125-47FC-BFE5-F420AF9BC857}" DTS:DTSID="{B4CCCD0F-2125-47FC-BFE5-F420AF9BC857}"
DTS:EvaluateAsExpression="True" DTS:EvaluateAsExpression="True"
DTS:Expression="&quot;-ExecutionPolicy Bypass -File \&quot;S:\\datahub\\pharmacy\\reconciliation\\weekly\\FormatManualReviewWorkbook.ps1\&quot; -WorkbookPath \&quot;&quot; &#xA;+ @[User::OutputFile] &#xA;+ &quot;\&quot;&quot;" DTS:Expression="&quot;-ExecutionPolicy Bypass -File \&quot;\\\\retreathealthcare.org\\network\\Share\\datahub\\pharmacy\\reconciliation\\weekly\\FormatManualReviewWorkbook.ps1\&quot; -WorkbookPath \&quot;&quot; &#xA;+ @[User::OutputFile] &#xA;+ &quot;\&quot;&quot;"
DTS:IncludeInDebugDump="2345" DTS:IncludeInDebugDump="2345"
DTS:Namespace="User" DTS:Namespace="User"
DTS:ObjectName="FormatArguments"> DTS:ObjectName="FormatArguments">
<DTS:VariableValue <DTS:VariableValue
DTS:DataType="8">-ExecutionPolicy Bypass -File "S:\datahub\pharmacy\reconciliation\weekly\FormatManualReviewWorkbook.ps1" -WorkbookPath "S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx"</DTS:VariableValue> DTS:DataType="8">-ExecutionPolicy Bypass -File "\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\FormatManualReviewWorkbook.ps1" -WorkbookPath "\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx"</DTS:VariableValue>
</DTS:Variable> </DTS:Variable>
<DTS:Variable <DTS:Variable
DTS:CreationName="" DTS:CreationName=""
@ -95,7 +95,7 @@
DTS:Namespace="User" DTS:Namespace="User"
DTS:ObjectName="OutputFile"> DTS:ObjectName="OutputFile">
<DTS:VariableValue <DTS:VariableValue
DTS:DataType="8">S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</DTS:VariableValue> DTS:DataType="8">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</DTS:VariableValue>
</DTS:Variable> </DTS:Variable>
<DTS:Variable <DTS:Variable
DTS:CreationName="" DTS:CreationName=""
@ -104,7 +104,7 @@
DTS:Namespace="User" DTS:Namespace="User"
DTS:ObjectName="PendingFolder"> DTS:ObjectName="PendingFolder">
<DTS:VariableValue <DTS:VariableValue
DTS:DataType="8">S:\datahub\pharmacy\reconciliation\weekly\pending</DTS:VariableValue> DTS:DataType="8">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\pending</DTS:VariableValue>
</DTS:Variable> </DTS:Variable>
<DTS:Variable <DTS:Variable
DTS:CreationName="" DTS:CreationName=""
@ -179,7 +179,7 @@ ORDER BY ReviewGroupID, ReviewID;</DTS:VariableValue>
DTS:Namespace="User" DTS:Namespace="User"
DTS:ObjectName="TemplateFile"> DTS:ObjectName="TemplateFile">
<DTS:VariableValue <DTS:VariableValue
DTS:DataType="8">S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</DTS:VariableValue> DTS:DataType="8">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</DTS:VariableValue>
</DTS:Variable> </DTS:Variable>
</DTS:Variables> </DTS:Variables>
<DTS:Executables> <DTS:Executables>
@ -236,7 +236,7 @@ ORDER BY ReviewGroupID, ReviewID;</DTS:VariableValue>
<DTS:ObjectData> <DTS:ObjectData>
<ExecuteProcessData <ExecuteProcessData
Executable="powershell.exe" Executable="powershell.exe"
Arguments="-ExecutionPolicy Bypass -File &quot;S:\datahub\pharmacy\reconciliation\weekly\FormatManualReviewWorkbook.ps1&quot; -WorkbookPath &quot;S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx&quot;" /> Arguments="-ExecutionPolicy Bypass -File &quot;\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\FormatManualReviewWorkbook.ps1&quot; -WorkbookPath &quot;\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx&quot;" />
</DTS:ObjectData> </DTS:ObjectData>
</DTS:Executable> </DTS:Executable>
<DTS:Executable <DTS:Executable
@ -1110,18 +1110,10 @@ ORDER BY ReviewGroupID, ReviewID;</property>
<LayoutInfo> <LayoutInfo>
<GraphLayout <GraphLayout
Capacity="16" xmlns="clr-namespace:Microsoft.SqlServer.IntegrationServices.Designer.Model.Serialization;assembly=Microsoft.SqlServer.IntegrationServices.Graph" xmlns:mssgle="clr-namespace:Microsoft.SqlServer.Graph.LayoutEngine;assembly=Microsoft.SqlServer.Graph" xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml"> Capacity="16" xmlns="clr-namespace:Microsoft.SqlServer.IntegrationServices.Designer.Model.Serialization;assembly=Microsoft.SqlServer.IntegrationServices.Graph" xmlns:mssgle="clr-namespace:Microsoft.SqlServer.Graph.LayoutEngine;assembly=Microsoft.SqlServer.Graph" xmlns:assembly="http://schemas.microsoft.com/winfx/2006/xaml">
<NodeLayout
Size="200,42"
Id="Package\Get Pending Review Runs"
TopLeft="552,83" />
<NodeLayout <NodeLayout
Size="197,42" Size="197,42"
Id="Package\For Each Loop Review Run\Create Review Workbook" Id="Package\For Each Loop Review Run\Create Review Workbook"
TopLeft="19,5.5" /> TopLeft="19,5.5" />
<NodeLayout
Size="207,42"
Id="Package\For Each Loop Review Run\Populate Review Workbook"
TopLeft="14,81" />
<NodeLayout <NodeLayout
Size="200,42" Size="200,42"
Id="Package\For Each Loop Review Run\Format Review Workbook" Id="Package\For Each Loop Review Run\Format Review Workbook"
@ -1130,6 +1122,10 @@ ORDER BY ReviewGroupID, ReviewID;</property>
Size="184,42" Size="184,42"
Id="Package\For Each Loop Review Run\Mark Review Exported" Id="Package\For Each Loop Review Run\Mark Review Exported"
TopLeft="23,258" /> TopLeft="23,258" />
<NodeLayout
Size="207,42"
Id="Package\For Each Loop Review Run\Populate Review Workbook"
TopLeft="14,81" />
<EdgeLayout <EdgeLayout
Id="Package\For Each Loop Review Run.PrecedenceConstraints[Constraint]" Id="Package\For Each Loop Review Run.PrecedenceConstraints[Constraint]"
TopLeft="117.5,47.5"> TopLeft="117.5,47.5">
@ -1203,6 +1199,10 @@ ORDER BY ReviewGroupID, ReviewID;</property>
Size="351,422" Size="351,422"
Id="Package\For Each Loop Review Run" Id="Package\For Each Loop Review Run"
TopLeft="484,171" /> TopLeft="484,171" />
<NodeLayout
Size="200,42"
Id="Package\Get Pending Review Runs"
TopLeft="552,83" />
<EdgeLayout <EdgeLayout
Id="Package.PrecedenceConstraints[Constraint]" Id="Package.PrecedenceConstraints[Constraint]"
TopLeft="655.75,125"> TopLeft="655.75,125">

View file

@ -11,8 +11,8 @@
DTS:LocaleID="1033" DTS:LocaleID="1033"
DTS:ObjectName="ManualReviewImport" DTS:ObjectName="ManualReviewImport"
DTS:PackageType="5" DTS:PackageType="5"
DTS:VersionBuild="22" DTS:VersionBuild="25"
DTS:VersionGUID="{9BD7A0FF-3AA6-45A3-86BD-A5C6FD2EFF6B}"> DTS:VersionGUID="{244CEC55-CC67-4A6F-9D29-E2CCB83ED199}">
<DTS:Property <DTS:Property
DTS:Name="PackageFormatVersion">8</DTS:Property> DTS:Name="PackageFormatVersion">8</DTS:Property>
<DTS:ConnectionManagers> <DTS:ConnectionManagers>
@ -36,7 +36,7 @@
DTS:Name="ConnectionString">@[User::CurrentReviewFile]</DTS:PropertyExpression> DTS:Name="ConnectionString">@[User::CurrentReviewFile]</DTS:PropertyExpression>
<DTS:ObjectData> <DTS:ObjectData>
<DTS:ConnectionManager <DTS:ConnectionManager
DTS:ConnectionString="S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx" /> DTS:ConnectionString="\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx" />
</DTS:ObjectData> </DTS:ObjectData>
</DTS:ConnectionManager> </DTS:ConnectionManager>
<DTS:ConnectionManager <DTS:ConnectionManager
@ -51,7 +51,7 @@
<DTS:ConnectionManager <DTS:ConnectionManager
DTS:ConnectRetryCount="0" DTS:ConnectRetryCount="0"
DTS:ConnectRetryInterval="0" DTS:ConnectRetryInterval="0"
DTS:ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties=&quot;EXCEL 12.0 XML;HDR=YES&quot;;" /> DTS:ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties=&quot;EXCEL 12.0 XML;HDR=YES&quot;;" />
</DTS:ObjectData> </DTS:ObjectData>
</DTS:ConnectionManager> </DTS:ConnectionManager>
<DTS:ConnectionManager <DTS:ConnectionManager
@ -62,7 +62,7 @@
<DTS:ObjectData> <DTS:ObjectData>
<DTS:ConnectionManager <DTS:ConnectionManager
DTS:FileUsageType="2" DTS:FileUsageType="2"
DTS:ConnectionString="S:\datahub\pharmacy\reconciliation\weekly\processed" /> DTS:ConnectionString="\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\processed" />
</DTS:ObjectData> </DTS:ObjectData>
</DTS:ConnectionManager> </DTS:ConnectionManager>
</DTS:ConnectionManagers> </DTS:ConnectionManagers>
@ -74,7 +74,7 @@
DTS:Namespace="User" DTS:Namespace="User"
DTS:ObjectName="CurrentReviewFile"> DTS:ObjectName="CurrentReviewFile">
<DTS:VariableValue <DTS:VariableValue
DTS:DataType="8">S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</DTS:VariableValue> DTS:DataType="8">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</DTS:VariableValue>
</DTS:Variable> </DTS:Variable>
<DTS:Variable <DTS:Variable
DTS:CreationName="" DTS:CreationName=""
@ -114,7 +114,7 @@
<DTS:ObjectData> <DTS:ObjectData>
<ForEachFileEnumeratorProperties> <ForEachFileEnumeratorProperties>
<FEFEProperty <FEFEProperty
Folder="S:\datahub\pharmacy\reconciliation\weekly\completed" /> Folder="\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\completed" />
<FEFEProperty <FEFEProperty
FileSpec="*.xlsx" /> FileSpec="*.xlsx" />
<FEFEProperty <FEFEProperty
@ -959,8 +959,8 @@
<DTS:ForEachVariableMappings> <DTS:ForEachVariableMappings>
<DTS:ForEachVariableMapping <DTS:ForEachVariableMapping
DTS:CreationName="" DTS:CreationName=""
DTS:DTSID="{0D431F3C-E536-437C-9486-2475519E4F47}" DTS:DTSID="{CDE50BC5-3AB7-49ED-8DAD-5F92DE312AF6}"
DTS:ObjectName="{0D431F3C-E536-437C-9486-2475519E4F47}" DTS:ObjectName="{CDE50BC5-3AB7-49ED-8DAD-5F92DE312AF6}"
DTS:ValueIndex="0" DTS:ValueIndex="0"
DTS:VariableName="User::CurrentReviewFile" /> DTS:VariableName="User::CurrentReviewFile" />
</DTS:ForEachVariableMappings> </DTS:ForEachVariableMappings>
@ -990,10 +990,18 @@
Size="192,42" Size="192,42"
Id="Package\For Each Completed Review Workbook\Finalize Manual Reviews" Id="Package\For Each Completed Review Workbook\Finalize Manual Reviews"
TopLeft="86,292" /> TopLeft="86,292" />
<NodeLayout
Size="175,42"
Id="Package\For Each Completed Review Workbook\Get Imported RunID"
TopLeft="332,128" />
<NodeLayout <NodeLayout
Size="203,42" Size="203,42"
Id="Package\For Each Completed Review Workbook\Load Manual Review Excel" Id="Package\For Each Completed Review Workbook\Load Manual Review Excel"
TopLeft="86,129" /> TopLeft="86,129" />
<NodeLayout
Size="205,42"
Id="Package\For Each Completed Review Workbook\Move Processed Workbook"
TopLeft="84,380" />
<EdgeLayout <EdgeLayout
Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint]" Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint]"
TopLeft="187.5,89"> TopLeft="187.5,89">
@ -1016,32 +1024,6 @@
<EdgeLabelCollection /> <EdgeLabelCollection />
</EdgeLayout.Labels> </EdgeLayout.Labels>
</EdgeLayout> </EdgeLayout>
<EdgeLayout
Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 2]"
TopLeft="185,250">
<EdgeLayout.Curve>
<mssgle:Curve
StartConnector="{assembly:Null}"
EndConnector="0,42"
Start="0,0"
End="0,34.5">
<mssgle:Curve.Segments>
<mssgle:SegmentCollection
Capacity="5">
<mssgle:LineSegment
End="0,34.5" />
</mssgle:SegmentCollection>
</mssgle:Curve.Segments>
</mssgle:Curve>
</EdgeLayout.Curve>
<EdgeLayout.Labels>
<EdgeLabelCollection />
</EdgeLayout.Labels>
</EdgeLayout>
<NodeLayout
Size="175,42"
Id="Package\For Each Completed Review Workbook\Get Imported RunID"
TopLeft="332,128" />
<EdgeLayout <EdgeLayout
Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 1]" Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 1]"
TopLeft="289,149.5"> TopLeft="289,149.5">
@ -1064,6 +1046,28 @@
<EdgeLabelCollection /> <EdgeLabelCollection />
</EdgeLayout.Labels> </EdgeLayout.Labels>
</EdgeLayout> </EdgeLayout>
<EdgeLayout
Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 2]"
TopLeft="185,250">
<EdgeLayout.Curve>
<mssgle:Curve
StartConnector="{assembly:Null}"
EndConnector="0,42"
Start="0,0"
End="0,34.5">
<mssgle:Curve.Segments>
<mssgle:SegmentCollection
Capacity="5">
<mssgle:LineSegment
End="0,34.5" />
</mssgle:SegmentCollection>
</mssgle:Curve.Segments>
</mssgle:Curve>
</EdgeLayout.Curve>
<EdgeLayout.Labels>
<EdgeLabelCollection />
</EdgeLayout.Labels>
</EdgeLayout>
<EdgeLayout <EdgeLayout
Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 3]" Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 3]"
TopLeft="419.5,170"> TopLeft="419.5,170">
@ -1098,10 +1102,6 @@
<EdgeLabelCollection /> <EdgeLabelCollection />
</EdgeLayout.Labels> </EdgeLayout.Labels>
</EdgeLayout> </EdgeLayout>
<NodeLayout
Size="205,42"
Id="Package\For Each Completed Review Workbook\Move Processed Workbook"
TopLeft="84,380" />
<EdgeLayout <EdgeLayout
Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 4]" Id="Package\For Each Completed Review Workbook.PrecedenceConstraints[Constraint 4]"
TopLeft="184.25,334"> TopLeft="184.25,334">

View file

@ -26,7 +26,7 @@
<SSIS:Property SSIS:Name="CreatorComputerName">BRT1-RDS01</SSIS:Property> <SSIS:Property SSIS:Name="CreatorComputerName">BRT1-RDS01</SSIS:Property>
<SSIS:Property SSIS:Name="Description"> <SSIS:Property SSIS:Name="Description">
</SSIS:Property> </SSIS:Property>
<SSIS:Property SSIS:Name="PasswordVerifier" SSIS:Sensitive="1">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAO6XIHfjZM0evaVyi8h5QcgAAAAACAAAAAAADZgAAwAAAABAAAABmqbR3I8+jxL0oB+2MHRgDAAAAAASAAACgAAAAEAAAAH9RBUKcyhzhRrJmxGsHhxmIAAAAh66nlyeO/S0yOf4tuPh/eMJ+LIKgs8tMszoZDw4R3S3llzYLAe0PljY7NtqzODvbhSFyFSU5I2GFdEzvhbdBYKmXewg3Yoic5HSlLz8bbti5fxH94zIshiU0Spf/UZCi4Bj/9IDw4+cf6k4Vy6eK5SKLgZzFkHdH6r6Q8Y2CcgPVWr9PV+kC2BQAAACKzIOgR9VWcJUTGQT2oiMMS2MoQA==</SSIS:Property> <SSIS:Property SSIS:Name="PasswordVerifier" SSIS:Sensitive="1">AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAO6XIHfjZM0evaVyi8h5QcgAAAAACAAAAAAADZgAAwAAAABAAAAC5SHmjX/PPqd1vCOWt4UU1AAAAAASAAACgAAAAEAAAAHfjaXMXepM6tJStS37YFaeIAAAAE+fkTSrqLHYL5FcMDpE58yo05kA6PgzkhHUYt1V+ETX99M3qjCeBmPsdKe66w8RTxaGyvn5OilyCHdWQaTmNdsYHanCw1xtrduGThAYWrTtEFBuVmhq4koaem7p9R7E3XmDWbBB12FuywY5/352vAldx+4ssC3Ttn8gAGqzTqpuSU+OVdLpOrRQAAACQ0zWIMhnZLwD73WsnkRjERf3mRQ==</SSIS:Property>
<SSIS:Property SSIS:Name="FormatVersion">1</SSIS:Property> <SSIS:Property SSIS:Name="FormatVersion">1</SSIS:Property>
</SSIS:Properties> </SSIS:Properties>
<SSIS:Packages> <SSIS:Packages>
@ -428,10 +428,10 @@
<SSIS:Property SSIS:Name="Name">ManualReviewImport</SSIS:Property> <SSIS:Property SSIS:Name="Name">ManualReviewImport</SSIS:Property>
<SSIS:Property SSIS:Name="VersionMajor">1</SSIS:Property> <SSIS:Property SSIS:Name="VersionMajor">1</SSIS:Property>
<SSIS:Property SSIS:Name="VersionMinor">0</SSIS:Property> <SSIS:Property SSIS:Name="VersionMinor">0</SSIS:Property>
<SSIS:Property SSIS:Name="VersionBuild">22</SSIS:Property> <SSIS:Property SSIS:Name="VersionBuild">25</SSIS:Property>
<SSIS:Property SSIS:Name="VersionComments"> <SSIS:Property SSIS:Name="VersionComments">
</SSIS:Property> </SSIS:Property>
<SSIS:Property SSIS:Name="VersionGUID">{9BD7A0FF-3AA6-45A3-86BD-A5C6FD2EFF6B}</SSIS:Property> <SSIS:Property SSIS:Name="VersionGUID">{244CEC55-CC67-4A6F-9D29-E2CCB83ED199}</SSIS:Property>
<SSIS:Property SSIS:Name="PackageFormatVersion">8</SSIS:Property> <SSIS:Property SSIS:Name="PackageFormatVersion">8</SSIS:Property>
<SSIS:Property SSIS:Name="Description"> <SSIS:Property SSIS:Name="Description">
</SSIS:Property> </SSIS:Property>
@ -597,7 +597,7 @@
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property> <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property> <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property> <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES";</SSIS:Property> <SSIS:Property SSIS:Name="Value">Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES";</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property> <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties> </SSIS:Properties>
</SSIS:Parameter> </SSIS:Parameter>
@ -670,7 +670,7 @@
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property> <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property> <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property> <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</SSIS:Property> <SSIS:Property SSIS:Name="Value">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property> <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties> </SSIS:Properties>
</SSIS:Parameter> </SSIS:Parameter>
@ -714,7 +714,7 @@
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property> <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property> <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property> <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">S:\datahub\pharmacy\reconciliation\weekly\processed</SSIS:Property> <SSIS:Property SSIS:Name="Value">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\processed</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property> <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties> </SSIS:Properties>
</SSIS:Parameter> </SSIS:Parameter>
@ -726,10 +726,10 @@
<SSIS:Property SSIS:Name="Name">ManualReviewExport</SSIS:Property> <SSIS:Property SSIS:Name="Name">ManualReviewExport</SSIS:Property>
<SSIS:Property SSIS:Name="VersionMajor">1</SSIS:Property> <SSIS:Property SSIS:Name="VersionMajor">1</SSIS:Property>
<SSIS:Property SSIS:Name="VersionMinor">0</SSIS:Property> <SSIS:Property SSIS:Name="VersionMinor">0</SSIS:Property>
<SSIS:Property SSIS:Name="VersionBuild">33</SSIS:Property> <SSIS:Property SSIS:Name="VersionBuild">34</SSIS:Property>
<SSIS:Property SSIS:Name="VersionComments"> <SSIS:Property SSIS:Name="VersionComments">
</SSIS:Property> </SSIS:Property>
<SSIS:Property SSIS:Name="VersionGUID">{98FD7D14-0AA2-476F-B1F7-2762A8541125}</SSIS:Property> <SSIS:Property SSIS:Name="VersionGUID">{09CBCBA0-EDAF-4ED0-B21D-D9F7486039D0}</SSIS:Property>
<SSIS:Property SSIS:Name="PackageFormatVersion">8</SSIS:Property> <SSIS:Property SSIS:Name="PackageFormatVersion">8</SSIS:Property>
<SSIS:Property SSIS:Name="Description"> <SSIS:Property SSIS:Name="Description">
</SSIS:Property> </SSIS:Property>
@ -880,7 +880,7 @@
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property> <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property> <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property> <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">Provider=Microsoft.ACE.OLEDB.12.0;Data Source=S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES";</SSIS:Property> <SSIS:Property SSIS:Name="Value">Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES";</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property> <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties> </SSIS:Properties>
</SSIS:Parameter> </SSIS:Parameter>
@ -953,7 +953,7 @@
<SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property> <SSIS:Property SSIS:Name="IncludeInDebugDump">0</SSIS:Property>
<SSIS:Property SSIS:Name="Required">0</SSIS:Property> <SSIS:Property SSIS:Name="Required">0</SSIS:Property>
<SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property> <SSIS:Property SSIS:Name="Sensitive">0</SSIS:Property>
<SSIS:Property SSIS:Name="Value">S:\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</SSIS:Property> <SSIS:Property SSIS:Name="Value">\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\ManualReviewTemplate.xlsx</SSIS:Property>
<SSIS:Property SSIS:Name="DataType">18</SSIS:Property> <SSIS:Property SSIS:Name="DataType">18</SSIS:Property>
</SSIS:Properties> </SSIS:Properties>
</SSIS:Parameter> </SSIS:Parameter>

View file

@ -0,0 +1,167 @@
param(
[Parameter(Mandatory = $true)]
[string]$WorkbookPath
)
$ErrorActionPreference = 'Stop'
# ImportExcel lives on the network share, but .NET will not load EPPlus.dll
# directly from a UNC path. Copy the module to this account's local TEMP
# directory before importing it.
$ImportExcelSource = "\\retreathealthcare.org\network\Share\datahub\pharmacy\reconciliation\weekly\tools\ImportExcel\7.8.10"
$LocalModuleRoot = Join-Path $env:TEMP "Reconciler\ImportExcel\7.8.10"
$LocalModuleManifest = Join-Path $LocalModuleRoot "ImportExcel.psd1"
if (-not (Test-Path $LocalModuleManifest)) {
if (Test-Path $LocalModuleRoot) {
Remove-Item $LocalModuleRoot -Recurse -Force
}
New-Item `
-ItemType Directory `
-Path $LocalModuleRoot `
-Force |
Out-Null
Copy-Item `
-Path "$ImportExcelSource\*" `
-Destination $LocalModuleRoot `
-Recurse `
-Force
}
# Remove downloaded/network security marking from the LOCAL copy.
Get-ChildItem $LocalModuleRoot -Recurse -File |
Unblock-File -ErrorAction SilentlyContinue
Import-Module $LocalModuleManifest -Force -ErrorAction Stop
if (-not (Test-Path $WorkbookPath)) {
throw "Workbook not found: $WorkbookPath"
}
$sheetName = "Manual Review"
# Load workbook
$pkg = Open-ExcelPackage -Path $WorkbookPath
try {
$ws = $pkg.Workbook.Worksheets[$sheetName]
if (-not $ws) {
throw "Worksheet '$sheetName' was not found."
}
# Determine last populated review row based on ReviewID in column B
$lastRow = 1
for ($row = 2; $row -le $ws.Dimension.End.Row; $row++) {
if ($null -ne $ws.Cells[$row, 2].Value -and
"$($ws.Cells[$row, 2].Value)".Trim() -ne "") {
$lastRow = $row
}
}
if ($lastRow -lt 2) {
throw "No manual-review rows were found in the workbook."
}
# Freeze header row
$ws.View.FreezePanes(2, 1)
# Header formatting
$header = $ws.Cells["A1:P1"]
$header.Style.Font.Bold = $true
$header.Style.Font.Color.SetColor([System.Drawing.Color]::White)
$header.Style.Fill.PatternType = "Solid"
$header.Style.Fill.BackgroundColor.SetColor(
[System.Drawing.Color]::FromArgb(31, 78, 121)
)
# Reviewer-entry headers
$reviewHeaders = $ws.Cells["N1:P1"]
$reviewHeaders.Style.Font.Color.SetColor(
[System.Drawing.Color]::FromArgb(255, 128, 0)
)
# Reviewer-entry cells only for actual review rows
$reviewRange = $ws.Cells["N2:P$lastRow"]
$reviewRange.Style.Fill.PatternType = "Solid"
$reviewRange.Style.Fill.BackgroundColor.SetColor(
[System.Drawing.Color]::FromArgb(226, 239, 218)
)
# Data validation on ReviewerDecision
$validationRange = "N2:N$lastRow"
# Remove any existing validation overlapping column N
$existingValidations = @($ws.DataValidations)
foreach ($dv in $existingValidations) {
if ($dv.Address.Address -like "N*") {
$ws.DataValidations.Remove($dv)
}
}
$validation = $ws.DataValidations.AddListValidation($validationRange)
$validation.Formula.Values.Add("MATCH")
$validation.Formula.Values.Add("NO_MATCH")
$validation.Formula.Values.Add("VARIANCE")
$validation.ShowErrorMessage = $true
$validation.ErrorTitle = "Invalid review decision"
$validation.Error = "Choose MATCH, NO_MATCH, or VARIANCE."
$validation.ShowInputMessage = $true
$validation.PromptTitle = "Reviewer Decision"
$validation.Prompt = "Select MATCH, NO_MATCH, or VARIANCE."
# Date/time formats
$ws.Cells["G2:G$lastRow"].Style.Numberformat.Format = "yyyy-mm-dd hh:mm:ss"
$ws.Cells["I2:I$lastRow"].Style.Numberformat.Format = "yyyy-mm-dd hh:mm:ss"
# Quantity/time formats
$ws.Cells["H2:H$lastRow"].Style.Numberformat.Format = "0.0000"
$ws.Cells["J2:J$lastRow"].Style.Numberformat.Format = "0.0000000"
$ws.Cells["K2:K$lastRow"].Style.Numberformat.Format = "0.00"
# Wrap long fields
$ws.Cells["L2:L$lastRow"].Style.WrapText = $true
$ws.Cells["O2:O$lastRow"].Style.WrapText = $true
# Column widths
$ws.Column(1).Width = 14
$ws.Column(2).Width = 12
$ws.Column(3).Width = 10
$ws.Column(4).Width = 18
$ws.Column(5).Width = 18
$ws.Column(6).Width = 32
$ws.Column(7).Width = 22
$ws.Column(8).Width = 14
$ws.Column(9).Width = 22
$ws.Column(10).Width = 16
$ws.Column(11).Width = 14
$ws.Column(12).Width = 55
$ws.Column(13).Width = 20
$ws.Column(14).Width = 20
$ws.Column(15).Width = 40
$ws.Column(16).Width = 20
# Autofilter on populated review range
$ws.Cells["A1:P$lastRow"].AutoFilter = $true
# Save
Close-ExcelPackage $pkg
Write-Host "Formatted workbook:"
Write-Host $WorkbookPath
Write-Host "Review rows: $($lastRow - 1)"
}
catch {
if ($pkg) {
$pkg.Dispose()
}
throw
}