- A case and incident management tool used by UNICEF and their partnering agencies
- Used to track and assist children in areas of crisis and conflict
- Used to track and report on incidents of violence
- Replaces old method of using lots of paper forms
- Used in situations like refugees fleeing war zones in Iraq or Syria, natural disasters in Indonesia, the Ebola outbreak in Sierra Leone
- Highly configurable to satisfy the many different requirements, the many different forms, and many different situations in the different implementations
3 main modules:
- A Primero instance can be configured to use one or more of these modules
- Usually an instance is CP or GBV or CP & GBV or MRM
- CP is the most common usage
- MRM is by far less common and so far has not been within the scope of these migrations
- Extremely sensitive data
Case: Manages an individual (usually a child) and the services they may receive
Incident: Reports on an instance of violence or abuse
Tracing Request/Trace: Used to help families locate missing children or to help separated children find their families
- Began as an open source project by grad students in 2010
- Ruby on Rails
- Version 1 (v1) uses a noSQL database Couchdb
- Quoin took over Primero in 2014 and began maintaining it
- Since then, Quoin has made maintenance fixes and added enhancements to satisfy new requirements
- Still open source. Quoin maintains repositories in Bitbucket. The application repo is synced with a GitHub repo.
- Other folks still submit changes to the GitHub repo which we review and merge
- The configuration repositories are not in GitHub
- Time for an overhaul
- v1: CouchDB (NoSQL database) v2: PostgreSQL
- Javascript React front end with API back end
- Can integrate with an Identity Provider to handle user authentication
- v1: vagrant VM’s v2: docker containers
- v1: had an accompanying Android mobile app v2: no such app
- v1: deployed using chef v2: deployed using ansible
- Some nested elements in the main record data in v1 were pulled out into separate tables/models in v2
- Some field/attribute names changed
- New dashboard permissions
- Application Translation String ymls were cleaned up
- Implementation specific configurable data
- In v1 can be imported/exported as a json file
- Can be imported as Ruby record creation scripts
- Configuration is stored in a separate repository from the application
- We have configurations for each implementation (Jordan, Iraq, Bangladesh, Syria, etc) in this repo.
- We have a repository for v1 configurations and a repository for v2 configurations
Changes from v1 to v2
invalid_users_report script
- Load the users on v1 integration server
- Run the export_user scripts on the v1 server to create v2 compatible ruby user seed scripts.
- Copy the generated user seed scripts and an import_user script to the target v2 server
- Copy the seed scripts and import_user script to the application docker container
- Run import_user script.
- Cases, Incident, Tracing Requests
- Some elements which were embedded in the main record data in v1 were pulled out into separate tables/models in v2
- Some fields were renamed / refactored
Finishing Up: Still in the application docker container, reindex solr
Form/field translations
Application string translations
- Test with users of each role/type/locale
- For each,
- Issues are logged in an issues spreadsheet
- Developers research the issue and provide an explanation or create a ticket to fix