Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Below here a table is shown with the identified changes between ECP and Valghalla, based on tasks and user stories

It is a work in progress !!

Data model is shown here: Data model
ECP vs Valghalla UI structure view: https://aarhuskommune-my.sharepoint.com/:x:/g/personal/movk_aarhus_dk/EUm4O-eqCuhNth1XIRnhEhwBGRDTjCBi5Cqe2kflA8m89g?rtime=E223oKNL20g

Most Jira user stories referenced has subtasks, references to other user stories and links to Figma where mockups of the desired user interface is
Go-to the Jira user story to see them.

Transformation:

In general we should remove:

  • CreatedByOld

  • ChangedByOld

When changing / removing / adding an Entity we should also update / review:

  • Automapper

  • EntityConfiguration

  • Schema

  • Modules

Changing from MSSQL to Postgres be aware of:

  • Connection string is different

  • Where model configuration is set to be required and HasDefaultValueSql, the “((1))” value has to be changed to “TRUE”

  • Where model configuration has HasColumnType(datetime) it needs to either be changed to HasColumnType(timestamp) or it needs to be removed, resulting in Postgres type timestamp with time zone

  • Previous migrations has to be deleted and a new will have to be created.
    dotnet ef migrations add InitialCreate --output-dir "C:\dev\Valghalla\Internal application\Kaskelot.Internal.Infrastructure\Migrations\

  • Stopping the PostgresSql engine
    sc stop postgresql-x64-15

  • Starting the PostgresSql engine (is not started)
    sc start postgresql-x64-15

From all data model entities

Action

Name

Link

Data notes

Functionality notes

Remove

Materials
Not needed

/administration/material
/building/details/

Remove / Repurpose

Courses → Repurpose for Communication templates and the mapping between templates and task types

Repurpose CourseEntity
Repurpose CourseOccasionEntity

/course → /Communication

Remove

Rooms
Not needed

Remove RoomEntity

/building/details/

Remove

Constituency
Not needed

Remove ConstituencyEntity

/administration/structure

Remove

Parish
Not needed

Remove ParishEntity

/administration/structure

Remove

Sign

Not needed

Remove SignEntity

/building/details/

Remove

Applications
Not needed

FieldAlternativeEntity
FieldDataEntity
FieldEntity
FixedFieldEntity
FixedFieldValueEntity
FormEntity
FormFieldEntity
FormPostEntity

Some of this functionality / components might be useful in the communication portion)
Like the RTF component.

Remove

Forms
Not needed

Change

Templates

Not needed

/administration/templates

  • Remove Blob storage reference

  • Replace with configuration and functionality for file repository mapped to a local file storage

Remove

Electorial district
Not needed, will only use District->Area

Remove ElectoralDistrictEntity

/administration/structure

Investigate

Tag

PersonTagEntity
TagEntity

/administration/category

Decide

Group Type → Team type

GroupTypeEntity
has connection to early voting we don’t need.

/administration/category

New

Validation rules

VALGHAL-131 - Getting issue details... STATUS

New entity and table in the data model or as a fixed model (enum or json object) in the code ?
No user should be able to change them.

Reference to a localized string per. entry

  • Show in Election type configuration

  • Use when assigning a task to a user or when a user assigns a task to him/her self

  • Also use when automatically updating the users base data (timer job)

  • No interface for configuration, types are fixed.

New

Election types

VALGHAL-238 - Getting issue details... STATUS

New entity and table in the data model.
ElectionTypeEntity

Reference to the selected validation rules

Show in administration area on same level as election.

New

Special diet

VALGHAL-283 - Getting issue details... STATUS

New entity and table in the data model
SpecialDietEntity

Perhaps reuse category dialog setup and category card from administration if it makes sense.

New

Election committee contact information

VALGHAL-111 - Getting issue details... STATUS

New entity and table in the data model, see fields in figma link on the individual task.
ElectionContactInformationEntity

Show in administration area on same level as election.

Change

Disctrict → Area

VALGHAL-107 - Getting issue details... STATUS

Add in DistrictEntity data model

  • Description (string)

Rename DistrictEntity to AreaEntity in source code

Move from structure to administration area on same level as election.

Add field for

  • Description (multi line)

Change

Election

VALGHAL-101 - Getting issue details... STATUS

Add in ElectionEntity data model

  • Description (string)

  • Election type reference (guid)

  • Task lock days (int)

  • Election period start date (date no time)

  • Election period end date (date no time)

Change in the entity data model

  • Active / published → change to status model and supply more values, maybe we need to create an enum for this.

Remove in entity data model

  • Constituency dependency

  • Create a wizard for new elections creation

  • Create copy election option

Add fields for

  • Selecting election type (dropdown)

  • Selecting start and end date (calendar for each)

  • Task Lock (default 4 days)
    Supply the default value in the municipal configuration database

New

Election

VALGHAL-321 - Getting issue details... STATUS

Automated tasks

  • De-activate election

Bound to communications settings

New

Election

VALGHAL-110 - Getting issue details... STATUS

N/A

All election data except participants is copied to a new election call the same and suffixed with (copy)
Or we could try and reuse the “based on election” functionality.
We need to be able to handle tasks and their date if the election date period is smaller than the one they copy from.
The easiest way of of that is to not touch the date period and then let it be up to the employees to adjust afterwards.

maybe we could write a stored procedure for that ?

New

Automated tasks / job

N/A

Known about the daily scheduled task / job

  • Run every 1 day

  • Check election end date

    • if today, deactivate the election.

  • Check person data needs updating

    • Query CPRUpdated - 7 days

    • Queue all found results into the CPR Queue database

    • Another job will pick up the changes.

New

CPR (social security job) Automated tasks / job

VALGHAL-130 - Getting issue details... STATUS

Create CPRQueueEntity

  • Id (int)

  • Date (datetime)
    when it was added to the database

  • Social security number (string)

  • Status (string)

    • New

    • Processing

    • Failed

    • Completed

  • RetryCounter (int)

  • Completed date (date)

Create Table CPRQueue

This is not set in stone, it is a suggestion

Known about this scheduled task / job

  • Run every 5 minutes ?

  • Pick up data from CPRQueue,

  • Ask CPR service for data

    • Before asking, mark the CPRQueueEntity status processing

    • If service response is bad, mark the CPRQueueEntity status failed and increment the RetryCounter

    • If the service response is good, update PersonEntity and mark the CPRQueueEntity status completed and set completed date

This is not set in stone, it is a suggestion

New

Web (Declaration of consent)

VALGHAL-108 - Getting issue details... STATUS

Maybe reuse the WebConfigurationEntity if it makes sense

  • Should be placed under administration

  • Will require Rich text editor implementation, reuse from Web area.

Change

Building->Work location

VALGHAL-102 - Getting issue details... STATUS

Add in the BuildingEntity data model

  • List of necessary TaskTypes

  • List of necessary Teams

  • Work location responsible (user id)

Remove in the BuildingEntity data model

  • Category

  • Deliveryaddress

  • DeliveryPostal code

  • DeliveryPostal place

  • Freetext

  • Inactive

  • CanExpand

  • InformerNeeded

  • InformationToContactPerson

  • ExternalComment

  • Rooms

  • Signs

  • Materials

  • BuildingEventLog

Rename to BuildingEntity to WorkLocation in source code

Remove BuildingEventLogEntity data model

  • Rename to Work Location

  • Move into to Administration area.

Add fields for

  • Task Types (multi select from all available task types)

  • Teams (multi select from all available teams)

  • Worklocation responsible (list (showing name (link to user) and remove option
    Button to add a new/additional worklocation responsibles

Remove / repurpose fields

  • New worklocation

    • Category

    • Delivery address

    • Delivery Postal code

    • Delivery Postal place

    • Inactive

    • Can expand

    • Informant needed

  • Worklocation details

    • Information to contact person

    • Comment

    • Comments shown on external web

    • Event log

    • Rooms

    • Signs

    • Materials

Change

Function → Task type

VALGHAL-103 - Getting issue details... STATUS

Add in FunctionEntity data model

  • Short name / Abbreviation (string)

  • Start time (only time not date)

  • End time (only time not date)

  • Use validation demands (bool)

  • Send reminder notification 5 days before due date (bool)

  • Is trusted required (bool)

  • Guide link (string)

Change in entity data model

  • FixedCompensation (is always true) perhaps can be omitted

  • StaffingElectoralDistricts should be UsedInDistricts and tie to district instead

Remove from entity data model

  • Public Description

  • LisaIntegration

  • ArchiveIntegration

  • CanViewPersonData

  • CanViewBuildingData

  • SetAsDefault

Rename FunctionEntity to TaskTypeEntity in source code

  • No binding to electoral district

  • Rename to Task types

  • Move from staffing to administration area on same level as election.

  • Use upload functionality from templates page or building details page.

Add field for

  • Short name / Abbreviation (single line)

  • Start time (only time not date) ex. use the time component from the add course occasion dialog.

  • End time (only time not date) ex. use the time component from the add course occasion dialog.

  • Use validation demands (yes/no)

  • Send reminder notification 5 days (fixed interval) before due date (yes/no)

  • Is trusted required (yes/no)

  • Guide link (single line)

Remove / repurpose fields

  • Public Description

  • Fee type (always fixed)

  • Can view person data

  • Can view building data

Change

Group → Team

VALGHAL-104 - Getting issue details... STATUS

Add in GroupEntity data model

  • Short name / Abbreviation

  • Team responsible reference(s)

  • Work location reference(s)

Change in entity data model

  • Freetext → Description

Remove from entity data model

  • ShowExternally

  • ShowPersonList

  • Rooms reference

Undetermined

  • Group Type

Rename from GroupEntity to TeamEntity in source code

  • Rename to Teams

  • Move from staffing to administration area on same level as election.

  • Show Short name / Abbreviation in overview table

Add fields for

  • Short name / Abbreviation

  • Functionality to add one or more team responsible(s) like a dialog where you can search for person

Remove / repurpose fields

  • Category

  • Show person on external web

  • Show person list on external web

  • Function

  • Amount

Change

User interface

VALGHAL-284 - Getting issue details... STATUS

N/A

Show election selection as a drop down in top right hand corner.
Note: If it is a lot of work, we can move it and keep the current feel with opening the dialog, then look at it as we near the end.

New

User interface

VALGHAL-281 - Getting issue details... STATUS

N/A

Show a breadcrumb in the solution
If we don’t already have some kind of breadcrumb we could use:
https://www.npmjs.com/package/angular-crumbs
Implementation video https://morioh.com/p/ca769096d74d

New

User interface

VALGHAL-80 - Getting issue details... STATUS

N/A

Use either

  • Small question mark icon and hover over text

  • Hover over text on the UI control it self

Help text should be localized

New

User Interface

VALGHAL-79 - Getting issue details... STATUS

Store data in WebConfiguration table
Use the WebConfigurationEntity

Help icon in top righthand corner

Change

Person → Participant

VALGHAL-54 - Getting issue details... STATUS

Add to the PersonEntity data model

  • Special diet reference (Guid)

  • Team reference (list)

  • Exempt from Digital post (true/false, default false)

  • Role (string)

    • Worklocation responsible

      Team responsible

      Reader

  • Deceased or Missing (true/false, default false)

  • Citizenship (true/false, default true)

  • CPRUpdated (Datetime)

Remove from PersonEntity data model

  • Inactive     

  • ExpressionOfInterestApproved

  • ApplicationApproved

  • FreeText

  • Car

  • HiddenIdentity

  • CourseOccasions

  • PersonCourseOccasions

  • PersonTags

  • FormPosts

  • StaffingElectoralDistricts

Rename from PersonEntity to ParticipantEntity

Change in the PersonEventLogEntity data model

  • Rename FollowUpNeeded → ShowInNotificationPanel

  • Remove Date

  • Remove CategoryId

  • Remove Category

/person → Add person

Add field for

  • Special diet (dropdown)

  • Team (dropdown)

  • Exempt from Digital post (boolean)

Add button (Lookup participant) next to the Social security number, should use a service to lookup the core participant data.

Reuse eventlog interface but make it more automated, no manual entries can be put in the eventlog

Remove fields

  • Category

  • Tag

  • Car

  • Comment

  • Inactive

  • Hidden identity


All fields should be “read-only” except:

  • Special diet

  • Phonenumber

  • Mobile Phonenumber

  • E-mail

  • Team selection

Change

Person overview → Participant overview

VALGHAL-56 - Getting issue details... STATUS

We might need to change/adjust the view supplying this functionality

/person

Show fields

  • Full name

  • Team

  • Birthday (repurpose social security number excluding the last 4 digits)

  • Assigned to at least one task (yes/no)

  • Comma separated list - Task types assigned (maybe repurpose assignments)

Remove fields

  • Phone number

  • E-mail

  • Postal code

  • Tags

  • Status

Filter changes

  • Add

    • Team

    • Digital post

  • Keep

    • Name

    • Assignments (TaskType)

    • Status ?

  • Remove

    • Social security number

    • Postal code

    • Comment

    • Category

    • Placement

    • Course

    • Education

    • Tags

Change

Person details → Participant details

VALGHAL-55 - Getting issue details... STATUS

/person/details/<ID>

Add communication log (reuse event log ?)

Reuse button (Lookup participant) next to the Social security number, should use a service to lookup the core participant data.

Remove:

  • Comment

  • Eventlog (maybe reuse for communication log)

  • Courses

New

Import participants

VALGHAL-58 - Getting issue details... STATUS

N/A

Should be a background task, because it could take some time ?

New

Export participants

VALGHAL-59 - Getting issue details... STATUS

Might need some minor changes

Ensure report generator / analyze functionality can be used for this.

New

Participants functionality

VALGHAL-64 - Getting issue details... STATUS

VALGHAL-60 - Getting issue details... STATUS

VALGHAL-63 - Getting issue details... STATUS

N/A

Logic for the different tasks are described in the tasks.

Automated tasks

  • Deletion of deceased participants

  • Deletion of all participants

Manually initiated

  • Bulk delete participants

New

Link generator

Add entity “LinkEntity” for link storage

  • Id (Guid)

  • Type (string)

    • Direct link (to a single task or a single Team and all the task associated with that Team)

    • Complex link (to a filtered view of tasks)

  • Value (the necessary information for the external web to show the data) (string)

  • Changed (datetime)

  • ChangedBy (user id)

  • Created (datetime)

  • CreatedBy (user id)

The link will be created in the internal application.

Where the functionality is available we should add a icon / button control to show the link
show eg. https://<url to external web>/link?id=<id (Guid) from DB>
Functionality should be used to build the link where needed and to store the link.
for complex links we could require that the filter / query is saved and that way we will have a reference to point at.

It will be parsed in the external web and should always show a minimum amount of information on a unprotected route in the external web.

A details page should also be in an unprotected route in the external web.

Require login/protected route when “Register” button on task is clicked in the external web.

This functionality is referenced a number of places in the specifications.

  • A single task

  • A single Team (show multiple tasks)

  • Complex / filtered task view (show multiple tasks)

New

External web - Task overview

VALGHAL-65 - Getting issue details... STATUS

N/A

  • Show tasks from a generated link

  • Additional filtering options

New

External web - Task registration

VALGHAL-66 - Getting issue details... STATUS

N/A

  • Register the task to the participant.

  • Require login upon registration.

  • Start “new user flow” if participant dies not have a user in the system.

Keep

Lists

VALGHAL-113 - Getting issue details... STATUS

VALGHAL-115 - Getting issue details... STATUS

N/A

Use report generator to create datasets to export to csv

New

Validation upon participant creation

VALGHAL-133 - Getting issue details... STATUS

VALGHAL-138 - Getting issue details... STATUS

VALGHAL-134 - Getting issue details... STATUS

VALGHAL-136 - Getting issue details... STATUS

VALGHAL-139 - Getting issue details... STATUS

VALGHAL-137 - Getting issue details... STATUS

New entity and table in the data model or as a fixed model (enum or json object) in the code ?
No user should be able to change them.

Reference to a localized string per. entry

  • All values are set in the election type configuration.

  • Any time a manual refresh is done it will ask the Danish service platform directly and update PersonEntity

    • On failure evaluate response

      • If timeout put in CPRQueue

      • If anything else, show friendly error message to the front-end.

New

Automated validation

Use CPRQueueEntity

Use Table CPRQueue

This is not set in stone, it is a suggestion

See previous entry about CPRQueue

The service should be expanded to also check assigned tasks and see that the participant is still valid, can be silent unless participant is no longer valid, then is should go in the participant eventlog.

This is not set in stone, it is a suggestion

New

Communication templates

VALGHAL-90 - Getting issue details... STATUS

VALGHAL-91 - Getting issue details... STATUS

VALGHAL-92 - Getting issue details... STATUS

VALGHAL-86 - Getting issue details... STATUS

VALGHAL-87 - Getting issue details... STATUS

Create new enum with communication types

  • DigitalPost

  • Email

  • SMS

Create a new entity and table to store the templates or repurpose the Course tables and entities

  • Id (GUID)

  • Name (Unique)

  • Subject (single line)

  • Body (multi line)

  • Type (string)

  • Changed (datetime)

  • ChangedBy (user id)

  • Created (datetime)

  • CreatedBy (user id)

Create a new entity and table to store the template to task type mapping or CourseOccasion tables and entities.

  • Id (GUID)

  • CommunicationTemplateId (guid)

  • TaskTypeId (Guid)

  • Changed (datetime)

  • ChangedBy (user id)

  • Created (datetime)

  • CreatedBy (user id)

Create an interface with:

  • Limited Rich text editor for editing the templates

    • Digital Post and Email can use the same settings

    • SMS is plain text only.

  • Mapping between each template and each task type

    • Enable types for each task type

    • Email and Digital Post cannot be selected simultaneously on the same task type.

  • See other task for when the different messages are to be sent.

Change / New

External web

VALGHAL-68 - Getting issue details... STATUS

Use Person entity → Participant entity

Participants can see their own details on a page or in a dialog in the external web application

Only phone number and Email can be changed by the user on their profile

See task for rules on when its possible to delete a profile.

Change / New

External web

VALGHAL-70 - Getting issue details... STATUS

Staffing Group entityStaffing entity

  • Person->Participant

  • Function -> Task type

  • Group -> Team

Possibility for a participant to cancel a task registration.

See Jira tasks for rules on when it is possible for a participant to cancel a task registration.

Change / New

External web

VALGHAL-73 - Getting issue details... STATUS

Use Staffing entity

See invitation and accept or decline assigned task.

Task is assigned in internal application, upon task assignment see VALGHAL-100 - Getting issue details... STATUS for more communication details.

New

External web

VALGHAL-74 - Getting issue details... STATUS

Use ElectionContactInformationEntity

Show either in the footer in the center or show in a dialog when clicking a link.

New

External web

VALGHAL-75 - Getting issue details... STATUS

Use Staffing entity

  • Show only task available to a specific team

  • Show both the occupied and available tasks.

  • Show participant name on occupied tasks.

New

External web

VALGHAL-76 - Getting issue details... STATUS

Use Staffing entity

Use LinkEntity

See Jira task description for the different ways a team task can be shared.

Show should only be possible if the user has the Team Responsible role.

New

External web

VALGHAL-186 - Getting issue details... STATUS

Use LinkEntity

Mostly UI and link functionality.

New

External web

VALGHAL-237 - Getting issue details... STATUS

Use TeamEntity

Use Staffing entity

  • Show a specific team to the team responsible

  • Show tasks to be staffed in different work locations

  • Show available participants.

  • Search in this view can be on anything.

    • Except it should never search in the last 4 digit of the social security number.

  • Never show the last 4 digit of the social security number

New

Exterla web

VALGHAL-236 - Getting issue details... STATUS

Use ElectionContactInformationEntity

Use ConfigurationEntity

  • Show required information in the footer.

  • The footer does not need to be sticky, just show it in the bottom of the page.

  • Simple information is stored in ConfigurationEntity

New

Communication

VALGHAL-85 - Getting issue details... STATUS

VALGHAL-97 - Getting issue details... STATUS

Create CommunicationLogEntity and CommunicationLog table

  • Id (Guid)

  • CommunicationType (string)

  • Participant (user id)

  • Status (string)

    • Sent

    • Queued/Pending

    • Failed

    • Retrying

  • Created (Date)

  • Show communication log in internal application

  • Show individual participant communication log on their profile both in the internal and external application.

  • Show a max of 50 rows at a time.

New

Communication notifications (Automated)

VALGHAL-100 - Getting issue details... STATUS

VALGHAL-81 - Getting issue details... STATUS

VALGHAL-602 - Getting issue details... STATUS

Use CommunicationQueueEntity

Use Table CommunicationQueue

This is not set in stone, it is a suggestion

Use the task types and communication template settings to determine if notification to participant should be sent.

Use an automated queued approach

See individual Jira stories and subtasks for more detail.

A service should be created to ensure notifications are sent and their status recorded in a communication log.

This is not set in stone, it is a suggestion

New

Notification hub

VALGHAL-98 - Getting issue details... STATUS

Based on the subtasks in the Jira story we will need a new NotificationEntity and Notification table

  • Id (Guid)

  • Created (datetime)

  • Read (bool)

  • Message (string)

  • LinkToSubject (string)

  • No labels