diff --git a/cove_bods/locale/en/LC_MESSAGES/django.po b/cove_bods/locale/en/LC_MESSAGES/django.po
index 2b0053a..4db9bf1 100644
--- a/cove_bods/locale/en/LC_MESSAGES/django.po
+++ b/cove_bods/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-12-05 13:48+0000\n"
+"POT-Creation-Date: 2019-03-27 17:26+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -84,6 +84,27 @@ msgstr ""
msgid "Person that is missing"
msgstr ""
+#: cove_bods/templates/cove_bods/additional_checks_table.html:98
+msgid "This statement ID has been used more than once."
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:101
+msgid "Statement ID"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:110
+msgid "This person statement has a birthday that is to early."
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:113
+#: cove_bods/templates/cove_bods/additional_checks_table.html:125
+msgid "Year"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:122
+msgid "This person statement has a birthday that is to late."
+msgstr ""
+
#. Translators: Label of a button that triggers search
#: cove_bods/templates/cove_bods/base.html:44
msgid "Go"
@@ -117,6 +138,10 @@ msgstr ""
msgid "Using the data review tool"
msgstr ""
+#: cove_bods/templates/cove_bods/base.html:122
+msgid "Running version "
+msgstr ""
+
#: cove_bods/templates/cove_bods/explore.html:5
msgid "Load New File"
msgstr ""
@@ -168,27 +193,48 @@ msgstr ""
msgid "Entity Statements"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:192
+#: cove_bods/templates/cove_bods/explore.html:194
+#: cove_bods/templates/cove_bods/explore.html:204
+#, python-format
+msgid " ... with type %(key)s"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/explore.html:199
msgid "Person Statements"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:195
+#: cove_bods/templates/cove_bods/explore.html:209
msgid "Ownership or Control Statements"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:198
+#: cove_bods/templates/cove_bods/explore.html:212
msgid "Ownership or Control Statements where interested party is a person"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:202
+#: cove_bods/templates/cove_bods/explore.html:216
msgid "Ownership or Control Statements where interested party is a entity"
msgstr ""
+#: cove_bods/templates/cove_bods/explore.html:220
+msgid "Ownership or Control Statements where interested party is unspecified"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/explore.html:227
+#, python-format
+msgid " Interest statements with type %(key)s"
+msgstr ""
+
#: cove_bods/views.py:55 cove_bods/views.py:66
+#: src/libcove/libcove/lib/converters.py:182
+#: src/libcove/libcove/lib/exceptions.py:21
+#: src/libcove/libcove/lib/exceptions.py:38
msgid "Sorry, we can't process that data"
msgstr ""
#: cove_bods/views.py:57 cove_bods/views.py:68
+#: src/libcove/libcove/lib/converters.py:184
+#: src/libcove/libcove/lib/exceptions.py:23
+#: src/libcove/libcove/lib/exceptions.py:40
msgid "Try Again"
msgstr ""
@@ -197,3 +243,24 @@ msgid ""
"BODS JSON should have an list as the top level, the JSON you supplied does "
"not."
msgstr ""
+
+#: src/libcove/libcove/lib/converters.py:185
+msgid ""
+"We think you tried to upload a JSON file, but it is not well formed JSON.\n"
+"\n"
+"Error message: {}"
+msgstr ""
+
+#: src/libcove/libcove/lib/exceptions.py:24
+msgid ""
+"We did not recognise the file type.\n"
+"\n"
+"We can only process json, csv and xlsx files."
+msgstr ""
+
+#: src/libcove/libcove/lib/exceptions.py:41
+msgid ""
+"We think you tried to supply a spreadsheet, but we failed to convert it.\n"
+"\n"
+"Error message: {}"
+msgstr ""
diff --git a/cove_bods/locale/es/LC_MESSAGES/django.po b/cove_bods/locale/es/LC_MESSAGES/django.po
index 1af9e66..b806992 100644
--- a/cove_bods/locale/es/LC_MESSAGES/django.po
+++ b/cove_bods/locale/es/LC_MESSAGES/django.po
@@ -4,18 +4,18 @@
# FIRST AUTHOR , YEAR.
#
# Translators:
-# Ben Webb , 2018
# Bibiana Cristòfol , 2018
-# Eduardo Gomez , 2018
+# Ben Webb , 2019
+# Eduardo Gomez , 2019
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-12-05 13:48+0000\n"
+"POT-Creation-Date: 2019-03-27 17:26+0000\n"
"PO-Revision-Date: 2018-11-30 13:12+0000\n"
-"Last-Translator: Eduardo Gomez , 2018\n"
+"Last-Translator: Eduardo Gomez , 2019\n"
"Language-Team: Spanish (https://www.transifex.com/OpenDataServices/teams/59127/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -90,6 +90,27 @@ msgstr ""
msgid "Person that is missing"
msgstr ""
+#: cove_bods/templates/cove_bods/additional_checks_table.html:98
+msgid "This statement ID has been used more than once."
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:101
+msgid "Statement ID"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:110
+msgid "This person statement has a birthday that is to early."
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:113
+#: cove_bods/templates/cove_bods/additional_checks_table.html:125
+msgid "Year"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/additional_checks_table.html:122
+msgid "This person statement has a birthday that is to late."
+msgstr ""
+
#. Translators: Label of a button that triggers search
#: cove_bods/templates/cove_bods/base.html:44
msgid "Go"
@@ -123,6 +144,10 @@ msgstr "Comprobar y revisar"
msgid "Using the data review tool"
msgstr "Uso de la herramienta de revisión de datos"
+#: cove_bods/templates/cove_bods/base.html:122
+msgid "Running version "
+msgstr "Versión en ejecución"
+
#: cove_bods/templates/cove_bods/explore.html:5
msgid "Load New File"
msgstr "Cargar archivo nuevo"
@@ -174,27 +199,48 @@ msgstr "Estadísticas "
msgid "Entity Statements"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:192
+#: cove_bods/templates/cove_bods/explore.html:194
+#: cove_bods/templates/cove_bods/explore.html:204
+#, python-format
+msgid " ... with type %(key)s"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/explore.html:199
msgid "Person Statements"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:195
+#: cove_bods/templates/cove_bods/explore.html:209
msgid "Ownership or Control Statements"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:198
+#: cove_bods/templates/cove_bods/explore.html:212
msgid "Ownership or Control Statements where interested party is a person"
msgstr ""
-#: cove_bods/templates/cove_bods/explore.html:202
+#: cove_bods/templates/cove_bods/explore.html:216
msgid "Ownership or Control Statements where interested party is a entity"
msgstr ""
+#: cove_bods/templates/cove_bods/explore.html:220
+msgid "Ownership or Control Statements where interested party is unspecified"
+msgstr ""
+
+#: cove_bods/templates/cove_bods/explore.html:227
+#, python-format
+msgid " Interest statements with type %(key)s"
+msgstr ""
+
#: cove_bods/views.py:55 cove_bods/views.py:66
+#: src/libcove/libcove/lib/converters.py:182
+#: src/libcove/libcove/lib/exceptions.py:21
+#: src/libcove/libcove/lib/exceptions.py:38
msgid "Sorry, we can't process that data"
msgstr "Lo sentimos, no podemos procesar esos datos"
#: cove_bods/views.py:57 cove_bods/views.py:68
+#: src/libcove/libcove/lib/converters.py:184
+#: src/libcove/libcove/lib/exceptions.py:23
+#: src/libcove/libcove/lib/exceptions.py:40
msgid "Try Again"
msgstr "Inténtelo de nuevo"
@@ -205,3 +251,33 @@ msgid ""
msgstr ""
"BODS JSON debe tener una lista al nivel más alto pero el JSON que ha "
"proporcionado no lo tiene."
+
+#: src/libcove/libcove/lib/converters.py:185
+msgid ""
+"We think you tried to upload a JSON file, but it is not well formed JSON.\n"
+"\n"
+"Error message: {}"
+msgstr ""
+"Creemos que ha intentado subir un archivo JSON, pero el archivo no es JSON bien formado.\n"
+"\n"
+"Mensaje del error: {}"
+
+#: src/libcove/libcove/lib/exceptions.py:24
+msgid ""
+"We did not recognise the file type.\n"
+"\n"
+"We can only process json, csv and xlsx files."
+msgstr ""
+"No hemos podido reconocer ese tipo de archivo.\n"
+"\n"
+"Sólo podemos procesar archivos json, csv y xlsx."
+
+#: src/libcove/libcove/lib/exceptions.py:41
+msgid ""
+"We think you tried to supply a spreadsheet, but we failed to convert it.\n"
+"\n"
+"Error message: {}"
+msgstr ""
+"Creemos que ha tratado de suministrar una hoja de cálculo, pero no hemos podido convertirla.\n"
+"\n"
+"Mensaje del error: {}"
diff --git a/cove_bods/templates/cove_bods/additional_checks_table.html b/cove_bods/templates/cove_bods/additional_checks_table.html
index 1d17b03..cddc3a3 100644
--- a/cove_bods/templates/cove_bods/additional_checks_table.html
+++ b/cove_bods/templates/cove_bods/additional_checks_table.html
@@ -92,6 +92,42 @@
{{ additional_check.seen_in_ownership_or_control_statement }}
+ {% elif additional_check.type == 'duplicate_statement_id' %}
+
+
+ {% trans 'This statement ID has been used more than once.' %}
+ |
+
+ {% trans 'Statement ID' %}: {{ additional_check.id }}
+ |
+
+
+ |
+
+ {% elif additional_check.type == 'person_birth_year_too_early' %}
+
+
+ {% trans 'This person statement has a birthday that is to early.' %}
+ |
+
+ {% trans 'Year' %}: {{ additional_check.year }}
+ |
+
+ {{ additional_check.person_statement }}
+ |
+
+ {% elif additional_check.type == 'person_birth_year_too_late' %}
+
+
+ {% trans 'This person statement has a birthday that is to late.' %}
+ |
+
+ {% trans 'Year' %}: {{ additional_check.year }}
+ |
+
+ {{ additional_check.person_statement }}
+ |
+
{% endif %}
{% endfor %}
diff --git a/cove_bods/templates/cove_bods/explore.html b/cove_bods/templates/cove_bods/explore.html
index f39c06e..b3c6602 100644
--- a/cove_bods/templates/cove_bods/explore.html
+++ b/cove_bods/templates/cove_bods/explore.html
@@ -188,9 +188,23 @@
{% trans 'Entity Statements' %}: {{ statistics.count_entity_statements }}
+ {% for key, count in statistics.count_entity_statements_types.items %}
+ {% if count > 0 %}
+
+ {% blocktrans %} ... with type {{ key }}{% endblocktrans %}: {{ count }}
+
+ {% endif %}
+ {% endfor %}
{% trans 'Person Statements' %}: {{ statistics.count_person_statements }}
+ {% for key, count in statistics.count_person_statements_types.items %}
+ {% if count > 0 %}
+
+ {% blocktrans %} ... with type {{ key }}{% endblocktrans %}: {{ count }}
+
+ {% endif %}
+ {% endfor %}
{% trans 'Ownership or Control Statements' %}: {{ statistics.count_ownership_or_control_statement }}
@@ -202,6 +216,21 @@
{% trans 'Ownership or Control Statements where interested party is a entity' %}:
{{ statistics.count_ownership_or_control_statement_interested_party_with_entity }}
+
+ {% trans 'Ownership or Control Statements where interested party is unspecified' %}:
+ {{ statistics.count_ownership_or_control_statement_interested_party_with_unspecified }}
+
+
+ {% for key, count in statistics.count_ownership_or_control_statement_interest_statement_types.items %}
+ {% if count > 0 %}
+
+ {% blocktrans %} Interest statements with type {{ key }}{% endblocktrans %}: {{ count }}
+
+ {% endif %}
+ {% endfor %}
+
+
+
diff --git a/requirements.in b/requirements.in
index ceb6e71..d1a0dfe 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,7 +1,9 @@
# Lock this version of dealer because later versions have a problem - middleware is of wrong style to use with MIDDLEWARE_CLASSES
dealer==2.0.5
Django<1.12
+# Lock this version of jsonschema, as that's what some of our libraries lock
+jsonschema<2.7
-e git+https://github.com/OpenDataServices/flatten-tool.git@v0.5.0#egg=flattentool
-e git+https://github.com/OpenDataServices/lib-cove.git@v0.3.1#egg=libcove
--e git+https://github.com/openownership/lib-cove-bods.git@v0.2.0#egg=libcovebods
+-e git+https://github.com/openownership/lib-cove-bods.git@v0.3.0#egg=libcovebods
-e git+https://github.com/OpenDataServices/lib-cove-web.git@v0.5.0#egg=libcoveweb
diff --git a/requirements.txt b/requirements.txt
index 7e1a141..d3dbd46 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,16 +1,19 @@
# Lock this version of dealer because later versions have a problem - middleware is of wrong style to use with MIDDLEWARE_CLASSES
dealer==2.0.5
Django==1.11.20
+# Lock this version of jsonschema, as that's what some of our libraries lock
+jsonschema==2.6.0
-e git+https://github.com/OpenDataServices/flatten-tool.git@4c13ef0b32a59e810919a3de09bc8f64ce8f9392#egg=flattentool
-e git+https://github.com/OpenDataServices/lib-cove.git@7bcec77f9289e405499d871c131b78289d9316cc#egg=libcove
--e git+https://github.com/openownership/lib-cove-bods.git@8540497ca482155babea64ed096ac47697b97e90#egg=libcovebods
+-e git+https://github.com/openownership/lib-cove-bods.git@819dcf56ff99fdb45a97cddfed0b8a3fde972e6b#egg=libcovebods
-e git+https://github.com/OpenDataServices/lib-cove-web.git@82dbc80309a03812cc2397345a1397ee0f6da4a4#egg=libcoveweb
## The following requirements were added by pip freeze:
bleach==3.1.0
cached-property==1.5.1
-certifi==2018.11.29
+certifi==2019.3.9
chardet==3.0.4
commonmark==0.8.1
+contextlib2==0.5.5
django-bootstrap3==11.0.0
django-debug-toolbar==1.11
django-environ==0.4.5
@@ -20,10 +23,9 @@ idna==2.8
jdcal==1.4
json-merge-patch==0.2
jsonref==0.2
-jsonschema==2.6.0
LEPL==5.1.3
-lxml==4.3.1
-openpyxl==2.6.0
+lxml==4.3.3
+openpyxl==2.6.1
python-dateutil==2.8.0
pytz==2018.9
@@ -31,9 +33,9 @@ raven==6.10.0
requests==2.21.0
rfc3987==1.3.8
rfc6266==0.0.4
-schema==0.6.8
+schema==0.7.0
six==1.12.0
-sqlparse==0.2.4
+sqlparse==0.3.0
strict-rfc3339==0.7
urllib3==1.24.1
webencodings==0.5.1
diff --git a/requirements_dev.txt b/requirements_dev.txt
index 6c91274..b13ad70 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -1,24 +1,27 @@
# Lock this version of dealer because later versions have a problem - middleware is of wrong style to use with MIDDLEWARE_CLASSES
dealer==2.0.5
Django==1.11.20
+# Lock this version of jsonschema, as that's what some of our libraries lock
+jsonschema==2.6.0
-e git+https://github.com/OpenDataServices/flatten-tool.git@4c13ef0b32a59e810919a3de09bc8f64ce8f9392#egg=flattentool
-e git+https://github.com/OpenDataServices/lib-cove.git@7bcec77f9289e405499d871c131b78289d9316cc#egg=libcove
--e git+https://github.com/openownership/lib-cove-bods.git@8540497ca482155babea64ed096ac47697b97e90#egg=libcovebods
+-e git+https://github.com/openownership/lib-cove-bods.git@819dcf56ff99fdb45a97cddfed0b8a3fde972e6b#egg=libcovebods
-e git+https://github.com/OpenDataServices/lib-cove-web.git@82dbc80309a03812cc2397345a1397ee0f6da4a4#egg=libcoveweb
-pytest==4.2.1
-pytest-django==3.4.7
-flake8==3.7.5
+pytest==4.3.1
+pytest-django==3.4.8
+flake8==3.7.7
pytest-localserver==0.5.0
selenium==3.141.0
## The following requirements were added by pip freeze:
atomicwrites==1.3.0
-attrs==18.2.0
+attrs==19.1.0
bleach==3.1.0
cached-property==1.5.1
-certifi==2018.11.29
+certifi==2019.3.9
chardet==3.0.4
commonmark==0.8.1
+contextlib2==0.5.5
django-bootstrap3==11.0.0
django-debug-toolbar==1.11
django-environ==0.4.5
@@ -29,29 +32,28 @@ idna==2.8
jdcal==1.4
json-merge-patch==0.2
jsonref==0.2
-jsonschema==2.6.0
LEPL==5.1.3
-lxml==4.3.1
+lxml==4.3.3
mccabe==0.6.1
more-itertools==6.0.0
-openpyxl==2.6.0
+openpyxl==2.6.1
pathlib2==2.3.3
-pluggy==0.8.1
-py==1.7.0
+pluggy==0.9.0
+py==1.8.0
pycodestyle==2.5.0
-pyflakes==2.1.0
+pyflakes==2.1.1
python-dateutil==2.8.0
pytz==2018.9
raven==6.10.0
requests==2.21.0
rfc3987==1.3.8
rfc6266==0.0.4
-schema==0.6.8
+schema==0.7.0
six==1.12.0
-sqlparse==0.2.4
+sqlparse==0.3.0
strict-rfc3339==0.7
urllib3==1.24.1
webencodings==0.5.1
-Werkzeug==0.14.1
+Werkzeug==0.15.1
xmltodict==0.12.0