diff --git a/app/main/views/send.py b/app/main/views/send.py
index 757f8cbe0..e5fafd3b2 100644
--- a/app/main/views/send.py
+++ b/app/main/views/send.py
@@ -1,6 +1,7 @@
import itertools
from string import ascii_uppercase
+from orderedset import OrderedSet
from contextlib import suppress
from zipfile import BadZipFile
from xlrd.biffh import XLRDError
@@ -445,6 +446,7 @@ def _check_messages(service_id, template_type, upload_id, letters_as_pdf=False):
template.template_type == 'letter',
not request.args.get('from_test'),
)),
+ required_recipient_columns=OrderedSet(recipients.recipient_column_headers) - optional_address_columns
)
diff --git a/app/templates/views/check/column-errors.html b/app/templates/views/check/column-errors.html
index 7e718b50d..4b3d788ae 100644
--- a/app/templates/views/check/column-errors.html
+++ b/app/templates/views/check/column-errors.html
@@ -48,7 +48,7 @@
{% elif not recipients.has_recipient_columns %}
- Your file needs {{ recipients.recipient_column_headers | formatted_list(
+ Your file needs {{ required_recipient_columns | formatted_list(
prefix='a column called',
prefix_plural='columns called'
) }}
diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py
index 45e6b4b44..5cd50a5d2 100644
--- a/tests/app/main/views/test_send.py
+++ b/tests/app/main/views/test_send.py
@@ -1663,6 +1663,38 @@ def test_check_messages_shows_data_errors_before_trial_mode_errors_for_letters(
)
+def test_check_messages_column_error_doesnt_show_optional_columns(
+ mocker,
+ client_request,
+ mock_get_service_letter_template,
+ mock_has_permissions,
+ mock_get_users_by_service,
+ mock_get_detailed_service_for_today,
+):
+
+ mocker.patch('app.main.views.send.s3download', return_value='\n'.join(
+ ['address_line_1,address_line_2,foo'] +
+ ['First Lastname,1 Example Road,SW1 1AA']
+ ))
+
+ with client_request.session_transaction() as session:
+ session['upload_data'] = {'template_id': '', 'original_file_name': ''}
+
+ page = client_request.get(
+ 'main.check_messages',
+ service_id=SERVICE_ONE_ID,
+ template_type='letter',
+ upload_id=uuid.uuid4(),
+ _test_page_title=False,
+ )
+
+ assert normalize_spaces(page.select_one('.banner-dangerous').text) == (
+ 'Your file needs columns called ‘address line 1’, ‘address line 2’ and ‘postcode’ '
+ 'Right now it has columns called ‘address_line_1’, ‘address_line_2’ and ‘foo’. '
+ 'Skip to file contents'
+ )
+
+
def test_generate_test_letter_doesnt_block_in_trial_mode(
client_request,
mocker,