"""General Payment Details Document.""" from payee.connectors.secure_data.document import SecureDocument from payee.connectors.secure_data.fields.text_field import TextField from payee.models.address import AddressUtilDocument class TaxDetailsDocument(SecureDocument): """Tax Details Document.""" _document_type = 'tax_details' _owner_type = 'Payee' _fields = { 'vat_number': TextField('vat_number', encrypt=True, required=True), 'country_of_tax_residency_code': TextField( 'country_of_tax_residency_code', encrypt=False, required=True ), 'local_tax_id': TextField('local_tax_id', encrypt=True, required=False), 'business_name': TextField('business_name', encrypt=True, required=True), 'business_number': TextField('business_number', encrypt=True, required=True), 'modified_by_profile_type': TextField( 'modified_by_profile_type', encrypt=True, required=True ), 'modified_by_profile_id': TextField( 'modified_by_profile_id', encrypt=True, required=True ), 'modified_by_identity': TextField( 'modified_by_identity', encrypt=True, required=True ), 'modified_at': TextField('modified_at', encrypt=True, required=False), 'revision': TextField('revision', encrypt=False, required=False), **AddressUtilDocument.fields, } @staticmethod def build_response( payee_id, secure_document_item: SecureDocument, obscure_pii=False ) -> dict | None: """Format the response given the raw data.""" # Added to prevent failure when DynamoDB is not in sync with prod data if secure_document_item is None: return None revision = ( secure_document_item.get_value('revision') if secure_document_item.field_exists('revision') else None ) message = { 'account_payee_id': payee_id, 'vat_number': secure_document_item.get_value( 'vat_number', is_obscured=obscure_pii ), 'local_tax_id': secure_document_item.get_value( 'local_tax_id', is_obscured=obscure_pii ), 'business_name': secure_document_item.get_value('business_name'), 'business_number': secure_document_item.get_value('business_number'), 'country_of_tax_residency_code': secure_document_item.get_value( 'country_of_tax_residency_code' ), 'address': AddressUtilDocument.build_response(secure_document_item) if secure_document_item.required_address_fields_filled() else None, 'modified_by_profile_type': secure_document_item.get_value( 'modified_by_profile_type' ) if secure_document_item.field_exists('modified_by_profile_type') else None, 'modified_by_profile_id': secure_document_item.get_value( 'modified_by_profile_id' ) if secure_document_item.field_exists('modified_by_profile_id') else None, 'modified_by_identity': secure_document_item.get_value( 'modified_by_identity' ) if secure_document_item.field_exists('modified_by_identity') else None, 'modified_by': secure_document_item.get_value('modified_by') if secure_document_item.field_exists('modified_by') else None, 'modified_at': secure_document_item.get_value('modified_at'), 'revision': secure_document_item.get_value('revision').split('#')[1] if revision else '0', } return message def required_address_fields_filled(self): """Check if required fields are filled.""" fields = [ 'address_1', 'city', 'country_code', ] for field in fields: if not self.field_exists(field) or self.get_value(field) is None: return False return True