diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 35f303e3d..89b30c45c 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -8,7 +8,10 @@ class PagesController < ApplicationController def legal end - def terms + def general_terms + end + + def census_terms end def transparency diff --git a/app/controllers/verification/residence_controller.rb b/app/controllers/verification/residence_controller.rb index b9951502e..515f98ca3 100644 --- a/app/controllers/verification/residence_controller.rb +++ b/app/controllers/verification/residence_controller.rb @@ -20,7 +20,7 @@ class Verification::ResidenceController < ApplicationController private def residence_params - params.require(:residence).permit(:document_number, :document_type, :date_of_birth, :postal_code) + params.require(:residence).permit(:document_number, :document_type, :date_of_birth, :postal_code, :terms_of_service) end def verify_attemps_left! diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index ec8deda2b..26b994c8e 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -2,12 +2,13 @@ class Verification::Residence include ActiveModel::Model include ActiveModel::Dates - attr_accessor :user, :document_number, :document_type, :date_of_birth, :postal_code + attr_accessor :user, :document_number, :document_type, :date_of_birth, :postal_code, :terms_of_service validates_presence_of :document_number validates_presence_of :document_type validates_presence_of :date_of_birth validates_presence_of :postal_code + validates :terms_of_service, acceptance: { allow_nil: false } validates :postal_code, length: { is: 5 } diff --git a/app/views/pages/census_terms.html.erb b/app/views/pages/census_terms.html.erb new file mode 100644 index 000000000..9ea4ba88a --- /dev/null +++ b/app/views/pages/census_terms.html.erb @@ -0,0 +1 @@ +<%= simple_format t('pages.census_terms') %> \ No newline at end of file diff --git a/app/views/pages/general_terms.html.erb b/app/views/pages/general_terms.html.erb new file mode 100644 index 000000000..5d63be7e6 --- /dev/null +++ b/app/views/pages/general_terms.html.erb @@ -0,0 +1 @@ +<%= t('pages.general_terms') %> \ No newline at end of file diff --git a/app/views/pages/terms.html.erb b/app/views/pages/terms.html.erb deleted file mode 100644 index 5481da07c..000000000 --- a/app/views/pages/terms.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= t('pages.terms') %> \ No newline at end of file diff --git a/app/views/verification/residence/new.html.erb b/app/views/verification/residence/new.html.erb index c61df2f27..6d890c8c9 100644 --- a/app/views/verification/residence/new.html.erb +++ b/app/views/verification/residence/new.html.erb @@ -13,6 +13,15 @@ start_year: 1900, end_year: 16.years.ago.year %> <%= f.text_field :postal_code %> +
+ + <%= f.check_box :terms_of_service, label: t("verification.residence.new.accept_terms_text") %> + + + <%= link_to t("verification.residence.new.accept_terms_link"), '/census_terms', target: "_blank" %> + +
+ <%= f.submit "Verify" %> <% end %> diff --git a/config/locales/pages.en.yml b/config/locales/pages.en.yml index 08b4a919f..c13006eb8 100644 --- a/config/locales/pages.en.yml +++ b/config/locales/pages.en.yml @@ -4,8 +4,10 @@ en: "Legal" privacy: "Privacy" - terms: + general_terms: "Terms and Conditions" + census_terms: + "Census Terms" transparency: "Transparency" opendata: diff --git a/config/locales/pages.es.yml b/config/locales/pages.es.yml index 4a737790c..2cd5beb5d 100644 --- a/config/locales/pages.es.yml +++ b/config/locales/pages.es.yml @@ -3,9 +3,71 @@ es: legal: "Legal" privacy: - "Privacidad" - terms: + "Privacidad" + general_terms: "Términos y Condiciones" + census_terms: + "Ley Orgánica 15/1999 (LOPD): + + 1º).- En el tratamiento y comprobación de datos de los usuarios que se den de alta en la Web, va a existir una recogida y comunicación de sus datos entre varias Direcciones Generales del Ayuntamiento, responsable cada una de sus propios ficheros de datos, que son los que van a dar cobertura jurídica LOPD al proyecto: + + Fichero: “Gestión de procesos participativos” cuyo responsable es la Dirección General de Participación Ciudadana y es donde se van a recoger y tratar los datos de todos los usuarios de la web. + + Fichero: “Padrón Municipal de Habitantes” cuyo responsable es la Dirección General de Estadística y donde constan todos los ciudadanos empadronados en Madrid + + Fichero: “Servicios Atención al Ciudadano” cuyo responsable es la Dirección General de Calidad y Atención al Ciudadano y donde se trata la información entre otras de los datos registrados en el CRM en el que figura información detallada de las personas que han realizado alguna gestión en el Ayuntamiento a través de Línea Madrid. + + 2º).- El tratamiento de los usuarios que se den de alta en la Web va a tener varios niveles de acceso y en cada uno de ellos se van a tratar y recoger diversos datos, en función de que se precise autenticar o no el usuario, y que le van a habilitar a su vez para realizar una serie de acciones (que tenéis que definir). + + a) El usuario se da de alta inicial en la Web aportando únicamente un correo electrónico. Este nivel 1 le permitirá........(lo tenéis que definir e informar al usuario). + + La edad mínima para darse de alta es 16 años, de lo que habrá que informar, aunque en este nivel no se va a contrastar este dato. + + La leyenda informativa de protección de datos que tendría que aparecer aquí sería la siguiente: + + Los usuarios serán mayores de 16 años y los datos aportados serán incorporados y tratados por el Ayuntamiento de Madrid de acuerdo con la descripción del fichero que figura al final de esta información. Con carácter general los datos recogidos no podrán ser cedidos a terceros salvo en los supuestos previstos en el artículo 11 de la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de carácter Personal. El interesado podrá ejercer los derechos de acceso, rectificación, cancelación y oposición, ante el órgano responsable que aparece al final de la información, todo lo cual se informa en el cumplimiento del artículo 5 de la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal. + + Nombre del fichero/tratamiento: GESTIÓN DE PROCESOS PARTICIPATIVOS + Finalidad del fichero/tratamiento: Gestionar los procesos participativos para el control de la habilitación de las personas que participan en los mismos y recuento meramente numérico y estadístico de los resultados derivados de los procesos de participación ciudadana + Órgano responsable: DIRECCIÓN GENERAL DE PARTICIPACIÓN CIUDADANA (c/ Alcalá 45, 28014-Madrid) + + b) Desde el nivel 1, se le dará la posibilidad al usuario de que pueda acceder a un nivel superior (nivel 3) que le permitirá......... (lo tenéis que definir e informar al usuario). + + Para acceder a este nivel 3, sería necesario estar empadronado en Madrid, ser mayor de edad y disponer de un código de verificación que le será facilitado por el Ayuntamiento (DG de Participación Ciudadana). + + Para ello el usuario deberá aportar los siguientes datos: + + Nombre y apellidos; DNI-pasaporte o tarjeta residencia; fecha de nacimiento. (No he incluido el domicilio pues con el campo DNI, tanto padrón como CRM os chequea la información). + + Estos datos se contrastarán (con el consentimiento del usuario) con Padrón y con CRM, con el objeto de autenticar el empadronamiento y comprobar si ya disponemos de teléfonos móviles o correos electrónicos que el usuario nos haya aportado previamente y que se le mostrarán en pantalla, al objeto de que confirme en cual de ellos quiere recibir el código de verificación que le acreditará en el nivel 3. + + En el caso de que no exista información previa de correo electrónico o móvil del usuario, o existiendo y mostrada al usuario, este no confirme dicho canal para recibir el código de verificación, se le dará la posibilidad de recibirlo en el domicilio que figure en el padrón municipal o pasarse por una OAC de Línea Madrid para que se lo faciliten (tenéis que definir como se le informa de ambas posibilidades) + + La leyenda informativa de protección de datos que tendría que aparecer aquí sería la siguiente: + + Para disponer del código de verificación hay que ser mayor de edad y estar empadronado en Madrid aportando los datos indicados anteriormente, los cuales serán contrastados por la Dirección General de Participación Ciudadana con los ficheros “Padrón Municipal de Habitantes” cuyo responsable es la Dirección General de Estadística y “Servicios Atención al Ciudadano” cuyo responsable es la Dirección General de Calidad y Atención al Ciudadano. + + Para contrastar esta información se precisa su consentimiento marcando esta casilla □ + + Los datos aportados serán incorporados y tratados por la Dirección General de Participación Ciudadana en el fichero “Gestión de Procesos Participativos” indicado anteriormente. + + Nota sobre la mayoría de edad para el nivel 3. + + He diferenciado entre nivel 1 (mayor de 16 años), del nivel 3 (mayoría de edad), teniendo en consideración que por la información que me habéis pasado y dado que en el nivel 3 se va a poder presentar iniciativas normativas, he tomado como referencia, creo, que la única ley que se podría aplicar por analogía y es la Ley Orgánica 3/1984 reguladora de la iniciativa legislativa popular, en cuyo artículo 1 establece la necesidad de ser mayor de edad. (No obstante el tema de la edad lo tendréis que valorar y decidir). + + c) Por último, también existirá la posibilidad para aquellos usuarios que no sean mayores de edad, o siéndolo, no estén empadronados en Madrid, de que puedan disponer de un nivel superior (nivel 2) que no precisará autenticación de datos por el Ayuntamiento. + + Para ello desde el nivel 1, se informará que en el caso de no ser mayor de edad, o siendolo, no se este empadronado en Madrid se podrá disponer de un código de acceso que se le enviará al número de móvil que nos facilite y que le permitirá.....( lo tenéis que definir e informar al usuario). + + La leyenda informativa de protección de datos que tendría que aparecer aquí sería la siguiente: + + Los datos aportados serán incorporados y tratados por la Dirección General de Participación Ciudadana en el fichero “Gestión de Procesos Participativos” indicado anteriormente. + + 3º) Teniendo en cuenta lo anterior, cumpliremos con las obligaciones de información y consentimiento previstas en la LOPD. + + No obstante y teniendo en consideración que en un primer momento vais a disponer, tratar y contrastar una gran cantidad de datos de los usuarios en los diferentes perfiles de acceso, es necesario que seáis especialmente cuidadosos con el principio de calidad de los datos, todo ello a los efectos de evitar errores en la recogida y tratamiento de los datos, teniendo especial importancia el disponer siempre de la prueba del consentimiento de los usuarios en el nivel 3, para la comprobación de sus datos en los dos ficheros. + + 4º) Para terminar tenemos que trabajar conjuntamente con la DG de Participación Ciudadana en las medidas de seguridad LOPD a aplicar a la Web y en como se documentan dichas medidas." transparency: "Transparencia" opendata: diff --git a/config/locales/verification.en.yml b/config/locales/verification.en.yml index f9b2db4fb..79e08f328 100644 --- a/config/locales/verification.en.yml +++ b/config/locales/verification.en.yml @@ -7,6 +7,8 @@ en: spanish_id: 'Spanish ID' passport: 'Passport' residence_card: 'Residence card' + accept_terms_text: "I accept the terms to access the city Census" + accept_terms_link: "Read terms" form_errors: 'prevented your residence verification' error_verifying_census: 'The census of the city of Madrid could not verify your information. Pero revise de information and try again or get in touch with us.' create: diff --git a/config/locales/verification.es.yml b/config/locales/verification.es.yml index b9cda6aed..39da1023d 100644 --- a/config/locales/verification.es.yml +++ b/config/locales/verification.es.yml @@ -7,6 +7,8 @@ es: spanish_id: 'DNI' passport: 'Pasaporte' residence_card: 'Tarjeta de residencia' + accept_terms_text: "Acepto los terminos de acceso al Padrón" + accept_terms_link: "Leer términos" form_errors: 'evitaron verificar tu residencia' error_verifying_census: 'El Padrón de Madrid no pudo verificar tu información. Revisa la información ó ponte en contacto con nosotros.' create: diff --git a/spec/controllers/pages_controller_spec.rb b/spec/controllers/pages_controller_spec.rb index 416c67bb5..e85b7c54d 100644 --- a/spec/controllers/pages_controller_spec.rb +++ b/spec/controllers/pages_controller_spec.rb @@ -13,8 +13,13 @@ describe PagesController do expect(response).to be_ok end + it 'should include a general terms page' do + get :general_terms + expect(response).to be_ok + end + it 'should include a terms page' do - get :terms + get :census_terms expect(response).to be_ok end end diff --git a/spec/factories.rb b/spec/factories.rb index 336ef8452..7a85a0193 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -25,6 +25,7 @@ FactoryGirl.define do document_type 1 date_of_birth Date.new(1980, 12, 31) postal_code "28013" + terms_of_service '1' end factory :verification_sms, class: Verification::Sms do diff --git a/spec/features/verification/level_three_verification_spec.rb b/spec/features/verification/level_three_verification_spec.rb index 617065379..4f7cc9bf3 100644 --- a/spec/features/verification/level_three_verification_spec.rb +++ b/spec/features/verification/level_three_verification_spec.rb @@ -14,14 +14,7 @@ feature 'Level three verification' do visit account_path click_link 'Verify my account' - select 'Spanish ID', from: 'residence_document_type' - fill_in 'residence_document_number', with: "12345678Z" - select_date '31-December-1980', from: 'residence_date_of_birth' - fill_in 'residence_postal_code', with: '28013' - - click_button 'Verify' - - expect(page).to have_content 'Residence verified' + verify_residence within("#verified_user_#{verified_user.id}_phone") do click_button "Send" @@ -54,14 +47,7 @@ feature 'Level three verification' do visit account_path click_link 'Verify my account' - select 'Spanish ID', from: 'residence_document_type' - fill_in 'residence_document_number', with: "12345678Z" - select_date '31-December-1980', from: 'residence_date_of_birth' - fill_in 'residence_postal_code', with: '28013' - - click_button 'Verify' - - expect(page).to have_content 'Residence verified' + verify_residence within("#verified_user_#{verified_user.id}_email") do click_button "Send" @@ -86,14 +72,7 @@ feature 'Level three verification' do visit account_path click_link 'Verify my account' - select 'Spanish ID', from: 'residence_document_type' - fill_in 'residence_document_number', with: "12345678Z" - select_date '31-December-1980', from: 'residence_date_of_birth' - fill_in 'residence_postal_code', with: '28013' - - click_button 'Verify' - - expect(page).to have_content 'Residence verified' + verify_residence fill_in 'sms_phone', with: "611111111" click_button 'Send' diff --git a/spec/features/verification/level_two_verification_spec.rb b/spec/features/verification/level_two_verification_spec.rb index 8358d33fe..dfb1e29c2 100644 --- a/spec/features/verification/level_two_verification_spec.rb +++ b/spec/features/verification/level_two_verification_spec.rb @@ -9,14 +9,7 @@ feature 'Level two verification' do visit account_path click_link 'Verify my account' - select 'Spanish ID', from: 'residence_document_type' - fill_in 'residence_document_number', with: "12345678Z" - select_date '31-December-1980', from: 'residence_date_of_birth' - fill_in 'residence_postal_code', with: '28013' - - click_button 'Verify' - - expect(page).to have_content 'Residence verified' + verify_residence fill_in 'sms_phone', with: "611111111" click_button 'Send' diff --git a/spec/features/verification/residence_spec.rb b/spec/features/verification/residence_spec.rb index 95f25ed2b..61231ea7d 100644 --- a/spec/features/verification/residence_spec.rb +++ b/spec/features/verification/residence_spec.rb @@ -13,6 +13,7 @@ feature 'Residence' do select 'Spanish ID', from: 'residence_document_type' select_date '31-December-1980', from: 'residence_date_of_birth' fill_in 'residence_postal_code', with: '28013' + check 'residence_terms_of_service' click_button 'Verify' @@ -44,6 +45,7 @@ feature 'Residence' do select 'January', from: 'residence_date_of_birth_2i' select '1', from: 'residence_date_of_birth_3i' fill_in 'residence_postal_code', with: '28013' + check 'residence_terms_of_service' click_button 'Verify' @@ -64,6 +66,7 @@ feature 'Residence' do select 'January', from: 'residence_date_of_birth_2i' select '1', from: 'residence_date_of_birth_3i' fill_in 'residence_postal_code', with: '28013' + check 'residence_terms_of_service' click_button 'Verify' expect(page).to have_content 'The census of the city of Madrid could not verify your information' diff --git a/spec/models/residence_spec.rb b/spec/models/residence_spec.rb index 189132c1f..ab0ab64f3 100644 --- a/spec/models/residence_spec.rb +++ b/spec/models/residence_spec.rb @@ -33,6 +33,11 @@ describe Verification::Residence do residence.valid? expect(residence.errors[:document_number]).to include("Already in use") end + + it "should validate census terms" do + residence.terms_of_service = nil + expect(residence).to_not be_valid + end end describe "save" do diff --git a/spec/support/common_actions.rb b/spec/support/common_actions.rb index 01aa85cdd..b773ca269 100644 --- a/spec/support/common_actions.rb +++ b/spec/support/common_actions.rb @@ -97,4 +97,15 @@ module CommonActions select month, from: "#{selector}_2i" select year, from: "#{selector}_1i" end + + def verify_residence + select 'Spanish ID', from: 'residence_document_type' + fill_in 'residence_document_number', with: "12345678Z" + select_date '31-December-1980', from: 'residence_date_of_birth' + fill_in 'residence_postal_code', with: '28013' + check 'residence_terms_of_service' + + click_button 'Verify' + expect(page).to have_content 'Residence verified' + end end