13
13
from cc_common .data_model .schema import PrivilegeRecordSchema
14
14
from cc_common .data_model .schema .adverse_action import AdverseActionData
15
15
from cc_common .data_model .schema .base_record import SSNIndexRecordSchema
16
- from cc_common .data_model .schema .common import ActiveInactiveStatus , CompactEligibilityStatus , UpdateCategory
16
+ from cc_common .data_model .schema .common import (
17
+ ActiveInactiveStatus ,
18
+ LicenseEncumberedStatusEnum ,
19
+ PrivilegeEncumberedStatusEnum ,
20
+ UpdateCategory ,
21
+ )
17
22
from cc_common .data_model .schema .home_jurisdiction .record import ProviderHomeJurisdictionSelectionRecordSchema
18
23
from cc_common .data_model .schema .license import LicenseData , LicenseUpdateData
19
24
from cc_common .data_model .schema .military_affiliation .common import (
23
28
from cc_common .data_model .schema .military_affiliation .record import MilitaryAffiliationRecordSchema
24
29
from cc_common .data_model .schema .privilege import PrivilegeData , PrivilegeUpdateData
25
30
from cc_common .data_model .schema .privilege .record import PrivilegeUpdateRecordSchema
31
+ from cc_common .data_model .schema .provider import ProviderData
26
32
from cc_common .exceptions import (
27
33
CCAwsServiceException ,
28
34
CCInternalException ,
@@ -921,10 +927,10 @@ def deactivate_privilege(
921
927
922
928
return privilege_record
923
929
924
- def _generate_set_administrator_set_status_item (
930
+ def _generate_set_privilege_encumbered_status_item (
925
931
self ,
926
932
privilege_data : PrivilegeData ,
927
- status_to_set : ActiveInactiveStatus ,
933
+ privilege_encumbered_status : PrivilegeEncumberedStatusEnum ,
928
934
):
929
935
privilege_data_record = privilege_data .serialize_to_database_record ()
930
936
return {
@@ -934,18 +940,18 @@ def _generate_set_administrator_set_status_item(
934
940
'pk' : {'S' : privilege_data_record ['pk' ]},
935
941
'sk' : {'S' : privilege_data_record ['sk' ]},
936
942
},
937
- 'UpdateExpression' : 'SET administratorSetStatus = :status, dateOfUpdate = :dateOfUpdate' ,
943
+ 'UpdateExpression' : 'SET encumberedStatus = :status, dateOfUpdate = :dateOfUpdate' ,
938
944
'ExpressionAttributeValues' : {
939
- ':status' : {'S' : status_to_set },
945
+ ':status' : {'S' : privilege_encumbered_status },
940
946
':dateOfUpdate' : {'S' : self .config .current_standard_datetime .isoformat ()},
941
947
},
942
948
},
943
949
}
944
950
945
- def _generate_set_license_compact_eligibility_status_item (
951
+ def _generate_set_license_encumbered_status_item (
946
952
self ,
947
953
license_data : LicenseData ,
948
- compact_eligibility_status : CompactEligibilityStatus ,
954
+ license_encumbered_status : LicenseEncumberedStatusEnum ,
949
955
):
950
956
license_data_record = license_data .serialize_to_database_record ()
951
957
return {
@@ -955,9 +961,31 @@ def _generate_set_license_compact_eligibility_status_item(
955
961
'pk' : {'S' : license_data_record ['pk' ]},
956
962
'sk' : {'S' : license_data_record ['sk' ]},
957
963
},
958
- 'UpdateExpression' : 'SET compactEligibility = :status, dateOfUpdate = :dateOfUpdate' ,
964
+ 'UpdateExpression' : 'SET encumberedStatus = :status, dateOfUpdate = :dateOfUpdate' ,
959
965
'ExpressionAttributeValues' : {
960
- ':status' : {'S' : compact_eligibility_status },
966
+ ':status' : {'S' : license_encumbered_status },
967
+ ':dateOfUpdate' : {'S' : self .config .current_standard_datetime .isoformat ()},
968
+ },
969
+ },
970
+ }
971
+
972
+ def _generate_set_provider_encumbered_status_item (
973
+ self ,
974
+ provider_data : ProviderData ,
975
+ # licenses and providers share the same encumbered status enum
976
+ provider_encumbered_status : LicenseEncumberedStatusEnum ,
977
+ ):
978
+ provider_data_record = provider_data .serialize_to_database_record ()
979
+ return {
980
+ 'Update' : {
981
+ 'TableName' : self .config .provider_table .name ,
982
+ 'Key' : {
983
+ 'pk' : {'S' : provider_data_record ['pk' ]},
984
+ 'sk' : {'S' : provider_data_record ['sk' ]},
985
+ },
986
+ 'UpdateExpression' : 'SET encumberedStatus = :status, dateOfUpdate = :dateOfUpdate' ,
987
+ 'ExpressionAttributeValues' : {
988
+ ':status' : {'S' : provider_encumbered_status },
961
989
':dateOfUpdate' : {'S' : self .config .current_standard_datetime .isoformat ()},
962
990
},
963
991
},
@@ -1003,14 +1031,14 @@ def encumber_privilege(self, adverse_action: AdverseActionData) -> None:
1003
1031
1004
1032
privilege_data = PrivilegeData .from_database_record (privilege_record )
1005
1033
1006
- need_to_set_privilege_to_inactive = True
1007
- # If already inactive , do nothing
1008
- if privilege_data .administratorSetStatus == ActiveInactiveStatus . INACTIVE :
1009
- logger .info ('Privilege already inactive . Not updating "administratorSetStatus " field' )
1010
- need_to_set_privilege_to_inactive = False
1034
+ need_to_set_privilege_to_encumbered = True
1035
+ # If already encumbered , do nothing
1036
+ if privilege_data .encumberedStatus == PrivilegeEncumberedStatusEnum . ENCUMBERED :
1037
+ logger .info ('Privilege already encumbered . Not updating "encumberedStatus " field' )
1038
+ need_to_set_privilege_to_encumbered = False
1011
1039
else :
1012
1040
logger .info (
1013
- 'Privilege is currently active. Setting privilege into an inactive state as part of update.'
1041
+ 'Privilege is currently active. Setting privilege into an encumbered state as part of update.'
1014
1042
)
1015
1043
1016
1044
# Create the update record
@@ -1028,9 +1056,9 @@ def encumber_privilege(self, adverse_action: AdverseActionData) -> None:
1028
1056
** privilege_data .to_dict (),
1029
1057
},
1030
1058
'updatedValues' : {
1031
- 'administratorSetStatus ' : ActiveInactiveStatus . INACTIVE ,
1059
+ 'encumberedStatus ' : PrivilegeEncumberedStatusEnum . ENCUMBERED ,
1032
1060
}
1033
- if need_to_set_privilege_to_inactive
1061
+ if need_to_set_privilege_to_encumbered
1034
1062
else {},
1035
1063
}
1036
1064
).serialize_to_database_record ()
@@ -1046,12 +1074,12 @@ def encumber_privilege(self, adverse_action: AdverseActionData) -> None:
1046
1074
self ._generate_put_transaction_item (adverse_action .serialize_to_database_record ()),
1047
1075
]
1048
1076
1049
- if need_to_set_privilege_to_inactive :
1050
- # Set the privilege record's administratorSetStatus to inactive and update the dateOfUpdate
1077
+ if need_to_set_privilege_to_encumbered :
1078
+ # Set the privilege record's encumberedStatus to encumbered and update the dateOfUpdate
1051
1079
transact_items .append (
1052
- self ._generate_set_administrator_set_status_item (
1080
+ self ._generate_set_privilege_encumbered_status_item (
1053
1081
privilege_data = privilege_data ,
1054
- status_to_set = ActiveInactiveStatus . INACTIVE ,
1082
+ privilege_encumbered_status = PrivilegeEncumberedStatusEnum . ENCUMBERED ,
1055
1083
)
1056
1084
)
1057
1085
self .config .dynamodb_client .transact_write_items (
@@ -1092,14 +1120,40 @@ def encumber_license(self, adverse_action: AdverseActionData) -> None:
1092
1120
1093
1121
license_data = LicenseData .from_database_record (license_record )
1094
1122
1095
- need_to_set_license_to_ineligible = True
1096
- # If already ineligible , do nothing
1097
- if license_data .compactEligibility == CompactEligibilityStatus . INELIGIBLE :
1098
- logger .info ('License already ineligible . Not updating license compact eligibility status' )
1099
- need_to_set_license_to_ineligible = False
1123
+ need_to_set_license_to_encumbered = True
1124
+ # If already encumbered , do nothing
1125
+ if license_data .encumberedStatus == LicenseEncumberedStatusEnum . ENCUMBERED :
1126
+ logger .info ('License already encumbered . Not updating license compact eligibility status' )
1127
+ need_to_set_license_to_encumbered = False
1100
1128
else :
1101
1129
logger .info (
1102
- 'License is currently eligible. Setting license into an ineligible state as part of update.'
1130
+ 'License is currently unencumbered. Setting license into an encumbered state as part of update.'
1131
+ )
1132
+
1133
+ # in the case of a license encumbrance, we need to update the provider record to encumbered
1134
+ # as well as the license record to denote that the provider is encumbered as a result of the license
1135
+ # encumbrance
1136
+ try :
1137
+ provider_record = self .config .provider_table .get_item (
1138
+ Key = {
1139
+ 'pk' : f'{ adverse_action .compact } #PROVIDER#{ adverse_action .providerId } ' ,
1140
+ 'sk' : f'{ adverse_action .compact } #PROVIDER' ,
1141
+ },
1142
+ )['Item' ]
1143
+ except KeyError as e :
1144
+ message = 'Provider not found'
1145
+ logger .info (message )
1146
+ raise CCNotFoundException (message ) from e
1147
+
1148
+ provider_data = ProviderData .from_database_record (provider_record )
1149
+
1150
+ need_to_set_provider_to_encumbered = True
1151
+ if provider_data .encumberedStatus == LicenseEncumberedStatusEnum .ENCUMBERED :
1152
+ logger .info ('Provider already encumbered. Not updating provider encumbered status' )
1153
+ need_to_set_provider_to_encumbered = False
1154
+ else :
1155
+ logger .info (
1156
+ 'Provider is currently unencumbered. Setting provider into an encumbered state as part of update.'
1103
1157
)
1104
1158
1105
1159
# Create the update record
@@ -1117,9 +1171,9 @@ def encumber_license(self, adverse_action: AdverseActionData) -> None:
1117
1171
** license_data .to_dict (),
1118
1172
},
1119
1173
'updatedValues' : {
1120
- 'compactEligibility ' : CompactEligibilityStatus . INELIGIBLE ,
1174
+ 'encumberedStatus ' : LicenseEncumberedStatusEnum . ENCUMBERED ,
1121
1175
}
1122
- if need_to_set_license_to_ineligible
1176
+ if need_to_set_license_to_encumbered
1123
1177
else {},
1124
1178
}
1125
1179
).serialize_to_database_record ()
@@ -1134,14 +1188,24 @@ def encumber_license(self, adverse_action: AdverseActionData) -> None:
1134
1188
self ._generate_put_transaction_item (adverse_action .serialize_to_database_record ()),
1135
1189
]
1136
1190
1137
- if need_to_set_license_to_ineligible :
1138
- # Set the license record's compactEligibility to ineligible and update the dateOfUpdate
1191
+ if need_to_set_license_to_encumbered :
1192
+ # Set the license record's encumberedStatus to encumbered
1139
1193
transact_items .append (
1140
- self ._generate_set_license_compact_eligibility_status_item (
1194
+ self ._generate_set_license_encumbered_status_item (
1141
1195
license_data = license_data ,
1142
- compact_eligibility_status = CompactEligibilityStatus .INELIGIBLE ,
1196
+ license_encumbered_status = LicenseEncumberedStatusEnum .ENCUMBERED ,
1197
+ )
1198
+ )
1199
+
1200
+ if need_to_set_provider_to_encumbered :
1201
+ # Set the provider record's encumberedStatus to encumbered
1202
+ transact_items .append (
1203
+ self ._generate_set_provider_encumbered_status_item (
1204
+ provider_data = provider_data ,
1205
+ provider_encumbered_status = LicenseEncumberedStatusEnum .ENCUMBERED ,
1143
1206
)
1144
1207
)
1208
+
1145
1209
self .config .dynamodb_client .transact_write_items (
1146
1210
TransactItems = transact_items ,
1147
1211
)
0 commit comments