feat: Add invalid ident notification for company register status checks

- Add notification system for invalid company identifications
- Update force delete notifications to handle invalid company cases
- Add translations for invalid ident messages (ET/EN)
- Add test coverage for invalid ident scenarios
- Remove debug logging from force delete process
- Clean up unused CSV templates

This change improves handling of invalid company identifications in the
Estonian business registry by providing proper notifications to registrars
and ensuring appropriate status updates.
This commit is contained in:
oleghasjanov 2024-12-17 14:08:57 +02:00
parent 475b1e7fbd
commit b229613b8a
8 changed files with 50 additions and 31 deletions

View file

@ -1,17 +0,0 @@
# Steps to Update company_status.rake
- [x] Modify the CSV output to include the contact type (role) information
- [x] Filter the output to include only Estonian organization type contacts
- [ ] Ensure only registrant contacts are included in the output
- [ ] Remove duplicate entries for the same organization
- [ ] Add a column to indicate if the contact is deleted due to an overdue annual statement
- [ ] Create a separate CSV file for invalid registrant contacts
- [ ] Update the existing CSV output to include only contacts that fail validation against the business registry and whitelist
- [ ] Add error handling and logging for better debugging
- [ ] Update the task description and comments to reflect the new functionality
- [ ] Add a new rake task or option to generate the separate registrant-only CSV file
- [ ] Implement validation against the business registry for Estonian organization contacts
- [ ] Implement validation against the whitelist for Estonian organization contacts
- [ ] Optimize the code for better performance, especially when dealing with large datasets
- [ ] Add unit tests for the new functionality
- [ ] Update the documentation to reflect the changes and new output format

View file

@ -6,10 +6,14 @@ module Domains
end
def notify_without_email
template = I18n.t('force_delete_set_on_domain',
domain_name: domain.name,
outzone_date: domain.outzone_date,
purge_date: domain.purge_date)
template = if reason == 'invalid_company'
I18n.t('invalid_ident', ident: domain.registrant.ident)
else
I18n.t('force_delete_set_on_domain',
domain_name: domain.name,
outzone_date: domain.outzone_date,
purge_date: domain.purge_date)
end
return if domain.registrar&.notifications&.last&.text&.include? template
@ -17,11 +21,15 @@ module Domains
end
def notify_with_email
template = I18n.t('force_delete_auto_email',
domain_name: domain.name,
outzone_date: domain.outzone_date,
purge_date: domain.purge_date,
email: email)
template = if reason == 'invalid_company'
I18n.t('invalid_ident', ident: domain.registrant.ident)
else
I18n.t('force_delete_auto_email',
domain_name: domain.name,
outzone_date: domain.outzone_date,
purge_date: domain.purge_date,
email: email)
end
return if domain.registrar&.notifications&.last&.text&.include? template

View file

@ -12,7 +12,6 @@ module Domains
# Allow deletion
statuses.delete(DomainStatus::CLIENT_DELETE_PROHIBITED)
puts "Try to save domain: #{domain.name} with statuses: #{statuses}"
domain.save(validate: false)
end
end

View file

@ -675,6 +675,7 @@ en:
actions: Actions
contact_has_been_archived: 'Contact with code %{contact_code} has been archieved because it has been orphaned for longer than %{orphan_months} months.'
dns_policy_violation: "Data management policy violation: DNSKEY does not match or not found in the authoritative nameservers"
invalid_ident: 'Invalid ident %{ident}'
number:
currency:

View file

@ -40,3 +40,5 @@ et:
taken: 'on juba lisatud'
ipv6:
taken: 'on juba lisatud'
invalid_ident: 'Vigane ident %{ident}'

View file

@ -154,6 +154,36 @@ class CompanyRegisterStatusJobTest < ActiveSupport::TestCase
CompanyRegister::Client.define_singleton_method(:new, original_new_method)
end
def test_companies_with_invalid_ident_should_receive_invalid_ident_notification
original_new_method = CompanyRegister::Client.method(:new)
CompanyRegister::Client.define_singleton_method(:new) do
object = original_new_method.call
def object.simple_data(registration_number:)
[Company.new('16752073', 'ACME Ltd', DELETED)]
end
object
end
@registrant_acme.update!(
company_register_status: Contact::DELETED,
checked_company_at: nil,
ident_type: 'org',
ident_country_code: 'EE',
ident: '16752073'
)
@registrant_acme.reload
CompanyRegisterStatusJob.perform_now(14, 0, 100)
@registrant_acme.reload
assert_equal Contact::DELETED, @registrant_acme.company_register_status
assert_equal @registrant_acme.registrant_domains.first.registrar.notifications.last.text, I18n.t('invalid_ident', ident: @registrant_acme.ident)
CompanyRegister::Client.define_singleton_method(:new, original_new_method)
end
def test_companies_with_force_delete_and_status_R_should_be_lifted
original_new_method = CompanyRegister::Client.method(:new)
CompanyRegister::Client.define_singleton_method(:new) do

View file

@ -1,2 +0,0 @@
company_code,company_name,status
12345678,Test Company,active
1 company_code company_name status
2 12345678 Test Company active

View file

@ -1,2 +0,0 @@
company_code,company_name,status
12345678,Test Company,active
1 company_code company_name status
2 12345678 Test Company active