diff --git a/.gitignore b/.gitignore index 65b1c6b168..d89eeaf4cb 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,5 @@ opensrp-chw/guinea/ opensrp-chw/togo/ opensrp-chw/liberia/ opensrp-chw/lmh/ -*google-services.json \ No newline at end of file +*google-services.json +/github.properties diff --git a/build.gradle b/build.gradle index 33a2c066ed..f6615a49e4 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,18 @@ buildscript { jcenter() mavenLocal() maven { url 'https://maven.fabric.io/public' } + maven { + def githubProperties = new Properties() + if (project.rootProject.file("github.properties").exists()) { + githubProperties.load(new FileInputStream(rootProject.file("github.properties"))) + } + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/onaio/kujaku") + credentials { + username = githubProperties['gpr.usr'] ?: System.getenv("GPR_USER") + password = githubProperties['gpr.key'] ?: System.getenv("GPR_API_KEY") + } + } maven { url "https://plugins.gradle.org/m2/" } } dependencies { @@ -53,8 +65,15 @@ allprojects { maven { url "https://cloudant.github.io/cloudant-sync-eap/repository" } maven { url 'https://maven.fabric.io/public' } maven { url "https://s3.amazonaws.com/repo.commonsware.com" } + maven { url "https://dl.bintray.com/ona/rdt-capture" } maven { url 'https://nexus.pentaho.org/content/groups/omni/' } - maven { url 'https://dl.bintray.com/ibm-watson-health/ibm-fhir-server-releases' } + maven { + url 'https://dl.bintray.com/ibm-watson-health/ibm-fhir-server-releases' + content { + // Does only include this group + includeGroup "com.ibm.fhir" + } + } } } diff --git a/gradle.properties b/gradle.properties index f42bf45107..76ca9aeeee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,4 +14,4 @@ android.jetifier.blacklist=shadows android.enableJetifier=true org.gradle.jvmargs=-Xmx2048m -Dkotlin.daemon.jvm.options\="-Xmx2048m" -android.useAndroidX=true +android.useAndroidX=true \ No newline at end of file diff --git a/opensrp-chw/build.gradle b/opensrp-chw/build.gradle index 2c1704d343..f6b2a84836 100644 --- a/opensrp-chw/build.gradle +++ b/opensrp-chw/build.gradle @@ -2,6 +2,7 @@ buildscript { repositories { google() jcenter() + maven { url 'https://jitpack.io' } maven { url 'https://maven.fabric.io/public' } } dependencies { @@ -42,7 +43,7 @@ allprojects { apply plugin: 'com.android.application' apply plugin: 'jacoco' apply plugin: 'com.github.kt3k.coveralls' -apply plugin: 'com.google.gms.google-services' +//apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.firebase.crashlytics' apply from: "jacoco.gradle" apply plugin: 'kotlin-android' @@ -157,6 +158,7 @@ android { buildConfigField "int", "STOCK_USAGE_REPORT_MINUTES", '1440' buildConfigField "boolean", "USE_UNIFIED_REFERRAL_APPROACH", "true" buildConfigField "boolean", "BUILD_FOR_BORESHA_AFYA_SOUTH", "false" + buildConfigField "String", "SERVER_ENV", "\"prod\"" } debug { @@ -175,6 +177,7 @@ android { buildConfigField "int", "STOCK_USAGE_REPORT_MINUTES", '1440' buildConfigField "boolean", "USE_UNIFIED_REFERRAL_APPROACH", "true" buildConfigField "boolean", "BUILD_FOR_BORESHA_AFYA_SOUTH", "false" + buildConfigField "String", "SERVER_ENV", "\"stage\"" testCoverageEnabled true } } @@ -251,6 +254,21 @@ android { buildConfigField "int", "MAX_CONNECTION_TIMEOUT", '5' buildConfigField "int", "MAX_READ_TIMEOUT", '5' } + crvs { + dimension = 'baseDimension' + applicationIdSuffix ".crvs" + versionCode 3 + versionName "1.0.2" + buildConfigField "String", 'opensrp_url', '"https://crvs-cd.smartregister.org/opensrp/"' + buildConfigField "String", 'guidebooks_url', '"https://opensrp.s3.amazonaws.com/media/togo/"' // TODO: To be updated to point to a CRVS S3 Bucket + buildConfigField "String", 'opensrp_url_debug', '"https://crvs.labs.smartregister.org/opensrp/"' + buildConfigField "String[]", "LOCATION_HIERACHY", '{"Country" , "Province" , "Health District","Health Facility","Village","Clinic" , "CHSS" , "CHA"}' + buildConfigField "String[]", "ALLOWED_LOCATION_LEVELS", '{"Clinic" , "CHSS" , "CHA"}' + buildConfigField "String[]", "ALLOWED_LOCATION_LEVELS_DEBUG", '{"Clinic" , "CHSS" , "CHA"}' + buildConfigField "String", 'DEFAULT_LOCATION', '"CHA"' + buildConfigField "String", 'DEFAULT_LOCATION_DEBUG', '"CHA"' + buildConfigField "int", "DATABASE_VERSION", '7' + } drc { resConfigs "en", "fr" dimension = 'baseDimension' @@ -348,7 +366,7 @@ android { } dependencies { - implementation('org.smartregister:opensrp-client-chw-core:2.1.3-SNAPSHOT@aar') { + implementation('org.smartregister:opensrp-client-chw-core:2.1.6-crvs-alpha-5-SNAPSHOT@aar') { transitive = true exclude group: 'com.android.support', module: 'appcompat-v7' exclude group: 'androidx.legacy', module: 'legacy-support-v4' @@ -381,7 +399,7 @@ dependencies { //For viewing PDFs in the app implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1' - + implementation 'com.google.android.gms:play-services-vision-common:17.0.2' implementation 'com.github.lecho:hellocharts-android:1.5.8@aar' testImplementation "org.koin:koin-test:2.0.1" diff --git a/opensrp-chw/src/ba/assets/ec_client_fields.json b/opensrp-chw/src/ba/assets/ec_client_fields.json index 312a6bd13d..ff700bcfa1 100644 --- a/opensrp-chw/src/ba/assets/ec_client_fields.json +++ b/opensrp-chw/src/ba/assets/ec_client_fields.json @@ -580,6 +580,8 @@ } ] }, + + { "name": "ec_child_activity", "columns": [ diff --git a/opensrp-chw/src/ba/assets/json.form/birth_certification.json b/opensrp-chw/src/ba/assets/json.form/birth_certification.json index 757fa5c604..9e9ce50770 100644 --- a/opensrp-chw/src/ba/assets/json.form/birth_certification.json +++ b/opensrp-chw/src/ba/assets/json.form/birth_certification.json @@ -104,14 +104,6 @@ "value": "true", "err": "{{birth_certification.step1.birth_cert_num.v_required.err}}" }, - "v_numeric": { - "value": "true", - "err": "{{birth_certification.step1.birth_cert_num.v_numeric.err}}" - }, - "v_regex": { - "value": "([0-9]{1,15})|\\s*", - "err": "{{birth_certification.step1.birth_cert_num.v_regex.err}}" - }, "relevance": { "rules-engine": { "ex-rules": { diff --git a/opensrp-chw/src/crvs/assets/ec_client_classification.json b/opensrp-chw/src/crvs/assets/ec_client_classification.json new file mode 100644 index 0000000000..d5c03569ee --- /dev/null +++ b/opensrp-chw/src/crvs/assets/ec_client_classification.json @@ -0,0 +1,165 @@ +{ + "case_classification_rules": [ + { + "comment": "Patient: This rule checks whether a given case belongs to register", + "rule": { + "type": "event", + "fields": [ + { + "field": "eventType", + "field_value": "Family Registration", + "creates_case": [ + "ec_family" + ] + }, + { + "field": "eventType", + "field_value": "Family Member Registration", + "creates_case": [ + "ec_family_member" + ] + }, + { + "field": "eventType", + "field_value": "Child Registration", + "creates_case": [ + "ec_child", + "ec_family_member" + ] + }, + { + "field": "eventType", + "field_value": "PNC Child Registration", + "creates_case": [ + "ec_child", + "ec_family_member" + ] + }, + { + "field": "eventType", + "field_value": "Update Family Registration", + "creates_case": [ + "ec_family" + ] + }, + { + "field": "eventType", + "field_value": "Update Family Member Registration", + "creates_case": [ + "ec_family_member" + ] + }, + { + "field": "eventType", + "field_value": "Update Child Registration", + "creates_case": [ + "ec_child", + "ec_family_member" + ] + }, + { + "field": "eventType", + "field_value": "Update Family Relations", + "creates_case": [ + "ec_family" + ] + }, + { + "field": "eventType", + "field_value": "Update Family Member Relations", + "creates_case": [ + "ec_family_member" + ] + }, + { + "field": "eventType", + "field_value": "Child Home Visit", + "creates_case": [ + "ec_child", + "ec_child_activity" + ] + }, + { + "field": "eventType", + "field_value": "Visit not done", + "creates_case": [ + "ec_child", + "ec_child_activity" + ] + }, + { + "field": "eventType", + "field_value": "Birth Certification", + "creates_case": [ + "ec_child" + ] + }, + { + "field": "eventType", + "field_value": "Observations Illness", + "creates_case": [ + "ec_child" + ] + }, + { + "field": "eventType", + "field_value": "ANC Registration", + "creates_case": [ + "ec_anc_register", + "ec_anc_log" + ] + }, + { + "field": "eventType", + "field_value": "ANC Home Visit", + "creates_case": [ + "ec_anc_register" + ] + }, + { + "field": "eventType", + "field_value": "Pregnancy Outcome", + "closes_case": [ + "ec_anc_register" + ] + }, + { + "field": "eventType", + "field_value": "Pregnancy Outcome", + "creates_case": [ + "ec_pregnancy_outcome" + ] + }, + { + "field": "eventType", + "field_value": "PNC Home Visit", + "creates_case": [ + "ec_pregnancy_outcome" + ] + }, + { + "field": "eventType", + "field_value": "Update ANC Registration", + "creates_case": [ + "ec_anc_register" + ] + }, + { + "field": "eventType", + "field_value": "Out Of Area Child Registration", + "creates_case": [ + "ec_out_of_area_child" + ] + }, + { + "field": "eventType", + "field_value": "Out Of Area Death Registration", + "creates_case": [ + "ec_out_of_area_death" + ] + } + ] + } + } + ] +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/ec_client_fields.json b/opensrp-chw/src/crvs/assets/ec_client_fields.json new file mode 100644 index 0000000000..ff318d3942 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/ec_client_fields.json @@ -0,0 +1,1756 @@ +{ + "bindobjects": [ + { + "name": "ec_family", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Client", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "unique_id", + "type": "Client", + "json_mapping": { + "field": "identifiers.opensrp_id" + } + }, + { + "column_name": "first_name", + "type": "Client", + "json_mapping": { + "field": "firstName" + } + }, + { + "column_name": "last_name", + "type": "Client", + "json_mapping": { + "field": "lastName" + } + }, + { + "column_name": "village_town", + "type": "Client", + "json_mapping": { + "field": "addresses.cityVillage" + } + }, + { + "column_name": "quarter_clan", + "type": "Client", + "json_mapping": { + "field": "addresses.commune" + } + }, + { + "column_name": "street", + "type": "Client", + "json_mapping": { + "field": "addresses.street" + } + }, + { + "column_name": "landmark", + "type": "Client", + "json_mapping": { + "field": "addresses.landmark" + } + }, + { + "column_name": "gps", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "163277AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "fam_source_income", + "type": "Client", + "json_mapping": { + "field": "attributes.fam_source_income" + } + }, + { + "column_name": "family_head", + "type": "Client", + "json_mapping": { + "field": "relationships.family_head" + } + }, + { + "column_name": "primary_caregiver", + "type": "Client", + "json_mapping": { + "field": "relationships.primary_caregiver" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "date_removed", + "type": "Client", + "json_mapping": { + "field": "attributes.dateRemoved" + } + }, + { + "column_name": "entity_type", + "type": "Event", + "json_mapping": { + "field": "entityType" + } + } + ] + }, + { + "name": "ec_family_member", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Client", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "unique_id", + "type": "Client", + "json_mapping": { + "field": "identifiers.opensrp_id" + } + }, + { + "column_name": "relational_id", + "type": "Client", + "json_mapping": { + "field": "relationships.family" + } + }, + { + "column_name": "first_name", + "type": "Client", + "json_mapping": { + "field": "firstName" + } + }, + { + "column_name": "middle_name", + "type": "Client", + "json_mapping": { + "field": "middleName" + } + }, + { + "column_name": "last_name", + "type": "Client", + "json_mapping": { + "field": "lastName" + } + }, + { + "column_name": "dob", + "type": "Client", + "json_mapping": { + "field": "birthdate" + } + }, + { + "column_name": "dod", + "type": "Client", + "json_mapping": { + "field": "deathdate" + } + }, + { + "column_name": "dob_unknown", + "type": "Client", + "json_mapping": { + "field": "birthdateApprox" + } + }, + { + "column_name": "gender", + "type": "Client", + "json_mapping": { + "field": "gender" + } + }, + { + "column_name": "ever_school", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "everSchool" + } + }, + { + "column_name": "school_level", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "schoolLevel" + } + }, + { + "column_name": "phone_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "other_phone_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "highest_edu_level", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "national_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "163084AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "entity_type", + "type": "Event", + "json_mapping": { + "field": "entityType" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "date_removed", + "type": "Client", + "json_mapping": { + "field": "attributes.dateRemoved" + } + }, + { + "column_name": "received_death_certificate", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "receivedDeathCertificate" + } + }, + { + "column_name": "death_certificate_issue_date", + "type": "Client", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificateIssueDate" + } + }, + { + "column_name": "mccd_conducted", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "mccdConducted" + } + }, + { + "column_name": "medically_treated", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "medicallyTreated" + } + }, + { + "column_name": "deceased_pregnant", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deceasedPregnant" + } + }, + { + "column_name": "pregnant_died", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "pregnantDied" + } + }, + { + "column_name": "death_certificate_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificationNumber" + } + }, + { + "column_name": "official_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialId" + } + }, + { + "column_name": "death_notification_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "deathNotificationDone" + } + }, + { + "column_name": "informant_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantName" + } + }, + { + "column_name": "informant_relationship", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantRelationship" + } + }, + { + "column_name": "informant_address", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantAddress" + } + }, + { + "column_name": "informant_phone", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantPhone" + } + }, + { + "column_name": "official_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialName" + } + }, + { + "column_name": "official_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialId" + } + }, + { + "column_name": "official_position", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialPosition" + } + }, + { + "column_name": "official_address", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialAddress" + } + }, + { + "column_name": "official_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialNumber" + } + }, + { + "column_name": "death_place", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathPlace" + } + }, + { + "column_name": "know_death_cause", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "knowDeathCause" + } + }, + { + "column_name": "death_manner", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathManner" + } + }, + { + "column_name": "death_cause", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathManner" + } + } + ] + }, + { + "name": "ec_child", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Client", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "unique_id", + "type": "Client", + "json_mapping": { + "field": "identifiers.opensrp_id" + } + }, + { + "column_name": "relational_id", + "type": "Client", + "json_mapping": { + "field": "relationships.family" + } + }, + { + "column_name": "mother_entity_id", + "type": "Client", + "json_mapping": { + "field": "relationships.mother" + } + }, + { + "column_name": "entry_point", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "entry_point" + } + }, + { + "column_name": "first_name", + "type": "Client", + "json_mapping": { + "field": "firstName" + } + }, + { + "column_name": "middle_name", + "type": "Client", + "json_mapping": { + "field": "middleName" + } + }, + { + "column_name": "last_name", + "type": "Client", + "json_mapping": { + "field": "lastName" + } + }, + { + "column_name": "dob", + "type": "Client", + "json_mapping": { + "field": "birthdate" + } + }, + { + "column_name": "dod", + "type": "Client", + "json_mapping": { + "field": "deathdate" + } + }, + { + "column_name": "dob_unknown", + "type": "Client", + "json_mapping": { + "field": "birthdateApprox" + } + }, + { + "column_name": "gender", + "type": "Client", + "json_mapping": { + "field": "gender" + } + }, + { + "column_name": "early_bf_1hr", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "161543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "birth_place_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthPlaceName" + } + }, + { + "column_name": "low_birth_weight", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1431AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "physically_challenged", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "159522AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "last_home_visit", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "last_home_visit" + } + }, + { + "column_name": "visit_not_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "visit_not_done" + } + }, + { + "column_name": "date_removed", + "type": "Client", + "json_mapping": { + "field": "attributes.dateRemoved" + } + }, + { + "column_name": "date_created", + "type": "Client", + "json_mapping": { + "field": "dateCreated" + } + }, + { + "column_name": "birth_cert", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "165406AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "birth_cert_issue_date", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "164129AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "birth_cert_num", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "162052AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "system_birth_notification", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "systemBirthNotification" + } + }, + { + "column_name": "birth_notification", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "165405AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "date_of_illness", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1730AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "illness_description", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1390AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "action_taken", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "164378AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "vaccine_card", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "vaccine_card" + } + }, + { + "column_name": "received_death_certificate", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "receivedDeathCertificate" + } + }, + { + "column_name": "death_certificate_issue_date", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificateIssueDate" + } + }, + { + "column_name": "birth_registration", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthRegistration" + } + }, + { + "column_name": "death_notification_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "deathNotificationDone" + } + }, + { + "column_name": "death_certificate_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificationNumber" + } + }, + { + "column_name": "official_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialId" + } + }, + { + "column_name": "birth_reg_type", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthRegType" + } + }, + { + "column_name": "informant_reason", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantReason" + } + }, + { + "column_name": "informant_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantName" + } + }, + { + "column_name": "informant_relationship", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantRelationship" + } + }, + { + "column_name": "informant_address", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantAddress" + } + }, + { + "column_name": "informant_phone", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantPhone" + } + }, + { + "column_name": "official_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialName" + } + }, + { + "column_name": "official_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialId" + } + }, + { + "column_name": "official_position", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialPosition" + } + }, + { + "column_name": "official_address", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialAddress" + } + }, + { + "column_name": "official_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialNumber" + } + } + ] + }, + { + "name": "ec_out_of_area_child", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Client", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "unique_id", + "type": "Client", + "json_mapping": { + "field": "identifiers.opensrp_id" + } + }, + { + "column_name": "surname", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "surname" + } + }, + { + "column_name": "first_name", + "type": "Client", + "json_mapping": { + "field": "firstName" + } + }, + { + "column_name": "middle_name", + "type": "Client", + "json_mapping": { + "field": "middleName" + } + }, + { + "column_name": "dob", + "type": "Client", + "json_mapping": { + "field": "birthdate" + } + }, + { + "column_name": "dob_unknown", + "type": "Client", + "json_mapping": { + "field": "birthdateApprox" + } + }, + { + "column_name": "gender", + "type": "Client", + "json_mapping": { + "field": "gender" + } + }, + { + "column_name": "mother_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "motherName" + } + }, + { + "column_name": "mother_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "motherId" + } + }, + { + "column_name": "mother_usual_residence", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "motherUsualResidence" + } + }, + { + "column_name": "mother_birth_place", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "motherBirthPlace" + } + }, + { + "column_name": "father_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "fatherName" + } + }, + { + "column_name": "father_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "fatherId" + } + }, + { + "column_name": "father_birth_place", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "fatherBirthPlace" + } + }, + { + "column_name": "father_dob_entered", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "fatherBirthDate" + } + }, + { + "column_name": "mother_marital_status", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "mother_dob_entered", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "motherBirthDate" + } + }, + { + "column_name": "birth_place_type", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthPlaceType" + } + }, + { + "column_name": "del_attendant", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "delAttendant" + } + }, + { + "column_name": "del_mode", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "delMode" + } + }, + { + "column_name": "type_of_pregnancy", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "typeOfPregnancy" + } + }, + { + "column_name": "birth_place_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthPlaceName" + } + }, + { + "column_name": "mother_highest_edu_level", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "father_marital_status", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "father_highest_edu_level", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "date_created", + "type": "Client", + "json_mapping": { + "field": "dateCreated" + } + }, + { + "column_name": "birth_cert", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "165406AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "birth_registration", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthRegistration" + } + }, + { + "column_name": "birth_notification", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "165405AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "birth_cert_issue_date", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "164129AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "birth_cert_num", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "162052AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "system_birth_notification", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "systemBirthNotification" + } + }, + { + "column_name": "birth_reg_type", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "birthRegType" + } + }, + { + "column_name": "informant_reason", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantReason" + } + } + ] + }, + { + "name": "ec_out_of_area_death", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Client", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "unique_id", + "type": "Client", + "json_mapping": { + "field": "identifiers.opensrp_id" + } + }, + { + "column_name": "name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "name" + } + }, + { + "column_name": "national_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "National_ID" + } + }, + { + "column_name": "dob", + "type": "Client", + "json_mapping": { + "field": "birthdate" + } + }, + { + "column_name": "age_calculated", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "ageCalculated" + } + }, + { + "column_name": "dob_calculated", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "dob_calculated" + } + }, + { + "column_name": "dob_unknown", + "type": "Client", + "json_mapping": { + "field": "birthdateApprox" + } + }, + { + "column_name": "dob_estimated", + "type": "Client", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "dob_estimated" + } + }, + { + "column_name": "remove_reason", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "date_died", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "death_place", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathPlace" + } + }, + { + "column_name": "nationality", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "nationality" + } + }, + { + "column_name": "marital_status", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "maritalStatus" + } + }, + { + "column_name": "know_death_cause", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "knowDeathCause" + } + }, + { + "column_name": "still_born_death", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "stillBornDeath" + } + }, + { + "column_name": "informant_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantName" + } + }, + { + "column_name": "informant_relationship", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantRelationship" + } + }, + { + "column_name": "informant_address", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantAddress" + } + }, + { + "column_name": "informant_phone", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "informantPhone" + } + }, + { + "column_name": "official_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialName" + } + }, + { + "column_name": "official_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialId" + } + }, + { + "column_name": "official_position", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialPosition" + } + }, + { + "column_name": "physician_name", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "physicianName" + } + }, + { + "column_name": "physician_position", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "physicianPosition" + } + }, + { + "column_name": "death_cause", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCause" + } + }, + { + "column_name": "death_manner", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathManner" + } + }, + { + "column_name": "official_address", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialAddress" + } + }, + { + "column_name": "official_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialNumber" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "date_created", + "type": "Client", + "json_mapping": { + "field": "dateCreated" + } + }, + { + "column_name": "received_death_certificate", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "receivedDeathCertificate" + } + }, + { + "column_name": "death_certificate_issue_date", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificateIssueDate" + } + }, + { + "column_name": "sex", + "type": "Client", + "json_mapping": { + "field": "gender" + } + }, + { + "column_name": "mccd_conducted", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "mccdConducted" + } + }, + { + "column_name": "medically_treated", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "medicallyTreated" + } + }, + { + "column_name": "deceased_pregnant", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "deceasedPregnant" + } + }, + { + "column_name": "pregnant_died", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "pregnantDied" + } + }, + { + "column_name": "death_notification_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "deathNotificationDone" + } + }, + { + "column_name": "death_certificate_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificationNumber" + } + } + ] + }, + { + "name": "ec_child_activity", + "columns": [ + { + "column_name": "event_id", + "type": "Event", + "json_mapping": { + "field": "eventId" + } + }, + { + "column_name": "relational_id", + "type": "Client", + "json_mapping": { + "field": "relationships.family" + } + }, + { + "column_name": "form_submission_id", + "type": "Event", + "json_mapping": { + "field": "formSubmissionId" + } + }, + { + "column_name": "base_entity_id", + "type": "Client", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "event_type", + "type": "Event", + "json_mapping": { + "field": "eventType" + } + }, + { + "column_name": "last_home_visit", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "last_home_visit" + } + }, + { + "column_name": "visit_not_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "visit_not_done" + } + }, + { + "column_name": "event_date", + "type": "Event", + "json_mapping": { + "field": "eventDate" + } + }, + { + "column_name": "date_removed", + "type": "Client", + "json_mapping": { + "field": "attributes.dateRemoved" + } + } + ] + }, + { + "name": "ec_anc_register", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Event", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "relational_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "relational_id" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "last_menstrual_period", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1427AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "gest_age", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1438AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "edd", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "5596AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "no_prev_preg", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "no_prev_preg" + } + }, + { + "column_name": "gravida", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "5624AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "no_surv_children", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "164894AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "phone_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "marital_status", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "last_home_visit", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "anc_visit_date" + } + }, + { + "column_name": "visit_not_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "anc_visit_not_done_date" + } + }, + { + "column_name": "anc_card", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1719AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "confirmed_visits", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "confirmed_visits" + } + }, + { + "column_name": "last_contact_visit", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "159590AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "has_anc_card", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1719AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + } + ] + }, + { + "name": "ec_pregnancy_outcome", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Event", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "relational_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "relational_id" + } + }, + { + "column_name": "preg_outcome", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "161033AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "miscarriage_date", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "165248AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "delivery_date", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "5599AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "delivery_place", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "1572AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "column_name": "last_visit_date", + "type": "Event", + "data_type": "date", + "source_format": "dd-MM-yyyy", + "save_format": "yyyy-MM-dd", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "pnc_visit_date" + } + }, + { + "column_name": "next_visit_date", + "type": "Event", + "data_type": "date", + "source_format": "dd-MM-yyyy", + "save_format": "yyyy-MM-dd", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "next_visit_date" + } + }, + { + "column_name": "last_health_facility_visit_date", + "type": "Event", + "data_type": "date", + "source_format": "dd-MM-yyyy", + "save_format": "yyyy-MM-dd", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "last_health_facility_visit_date" + } + }, + { + "column_name": "confirmed_health_facility_visits", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "confirmed_health_facility_visits" + } + }, + { + "column_name": "last_interacted_with", + "type": "Event", + "json_mapping": { + "field": "version" + } + }, + { + "column_name": "death_notification_done", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "formSubmissionField": "deathNotificationDone" + } + }, + { + "column_name": "death_certificate_number", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "deathCertificationNumber" + } + }, + { + "column_name": "official_id", + "type": "Event", + "json_mapping": { + "field": "obs.fieldCode", + "concept": "officialId" + } + } + ] + }, + { + "name": "ec_anc_log", + "columns": [ + { + "column_name": "base_entity_id", + "type": "Event", + "json_mapping": { + "field": "baseEntityId" + } + }, + { + "column_name": "date_created", + "type": "Event", + "json_mapping": { + "field": "eventDate" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/anc_member_registration.json b/opensrp-chw/src/crvs/assets/json.form/anc_member_registration.json new file mode 100644 index 0000000000..bfae063f91 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/anc_member_registration.json @@ -0,0 +1,284 @@ +{ + "count": "1", + "encounter_type": "ANC Registration", + "entity_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "" + }, + "step1": { + "title": "{{anc_member_registration.step1.title}}", + "fields": [ + { + "key": "relational_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "relational_id", + "type": "hidden" + }, + { + "key": "last_menstrual_period", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1427AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{anc_member_registration.step1.last_menstrual_period.hint}}", + "label_info_title": "{{anc_member_registration.step1.last_menstrual_period.label_info_title}}", + "label_info_text": "{{anc_member_registration.step1.last_menstrual_period.label_info_text}}", + "expanded": false, + "max_date": "today", + "min_date": "today-50w", + "v_required": { + "value": "true", + "err": "{{anc_member_registration.step1.last_menstrual_period.v_required.err}}" + }, + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_relevance.yml" + } + } + } + }, + { + "key": "last_menstrual_period_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "last_menstrual_period_unknown", + "openmrs_data_type": "text", + "type": "check_box", + "options": [ + { + "key": "lmp_unknown", + "text": "{{anc_member_registration.step1.last_menstrual_period_unknown.options.lmp_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "edd", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "5596AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{anc_member_registration.step1.edd.hint}}", + "max_date": "today+50w", + "min_date": "today", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_relevance.yml" + } + } + }, + "v_required": { + "value": "true", + "err": "{{anc_member_registration.step1.edd.v_required.err}}" + } + }, + { + "key": "gest_age_note", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{anc_member_registration.step1.gest_age_note.hint}}", + "read_only": true, + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + } + }, + { + "key": "weeks", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "value": "{{anc_member_registration.step1.weeks.value}}", + "type": "hidden" + }, + { + "key": "edd_note", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{anc_member_registration.step1.edd_note.hint}}", + "read_only": true, + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + } + }, + { + "key": "gest_age", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1438AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "hidden", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + } + }, + { + "key": "no_prev_preg", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "no_prev_preg", + "type": "edit_text", + "edit_type": "number", + "hint": "{{anc_member_registration.step1.no_prev_preg.hint}}", + "v_required": { + "value": "true", + "err": "{{anc_member_registration.step1.no_prev_preg.v_required.err}}" + }, + "v_numeric_integer": { + "value": "true", + "err": "{{anc_member_registration.step1.no_prev_preg.v_numeric_integer.err}}" + }, + "v_min": { + "value": "0", + "err": "{{anc_member_registration.step1.no_prev_preg.v_min.err}}" + }, + "v_max": { + "value": "45", + "err": "{{anc_member_registration.step1.no_prev_preg.v_max.err}}" + } + }, + { + "key": "gravida", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "5624AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "hidden", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + } + }, + { + "key": "no_surv_children", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "164894AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "edit_text", + "edit_type": "number", + "hint": "{{anc_member_registration.step1.no_surv_children.hint}}", + "v_required": { + "value": "true", + "err": "{{anc_member_registration.step1.no_surv_children.v_required.err}}" + }, + "v_numeric_integer": { + "value": "true", + "err": "{{anc_member_registration.step1.no_surv_children.v_numeric_integer.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_relevance.yml" + } + } + } + }, + { + "key": "total_foetal_deaths", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "type": "hidden", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_member_registration_calculation.yml" + } + } + } + }, + { + "key": "phone_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "edit_text", + "hint": "{{anc_member_registration.step1.phone_number.hint}}", + "v_numeric": { + "value": "true", + "err": "{{anc_member_registration.step1.phone_number.v_numeric.err}}" + }, + "v_required": { + "value": false, + "err": "{{anc_member_registration.step1.phone_number.v_required.err}}" + } + } + ] + }, + "properties_file_name": "anc_member_registration" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/anc_pregnancy_outcome.json b/opensrp-chw/src/crvs/assets/json.form/anc_pregnancy_outcome.json new file mode 100644 index 0000000000..7e6d770139 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/anc_pregnancy_outcome.json @@ -0,0 +1,706 @@ +{ + "validate_on_submit": true, + "show_errors_on_submit": false, + "count": "1", + "encounter_type": "Pregnancy Outcome", + "entity_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "" + }, + "step1": { + "title": "{{anc_pregnancy_outcome.step1.title}}", + "fields": [ + { + "key": "relational_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "relational_id", + "type": "hidden" + }, + { + "key": "pregnancy_outcome_label", + "type": "label", + "text": "{{anc_pregnancy_outcome.step1.pregnancy_outcome_label.text}}", + "has_bg": true, + "left_padding": "20dp", + "right_padding": "20dp", + "text_size": "7sp", + "text_color": "#000000" + }, + { + "key": "preg_outcome", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "161033AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.preg_outcome.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.preg_outcome.values[0]}}", + "{{anc_pregnancy_outcome.step1.preg_outcome.values[1]}}", + "{{anc_pregnancy_outcome.step1.preg_outcome.values[2]}}", + "{{anc_pregnancy_outcome.step1.preg_outcome.values[3]}}" + ], + "keys": [ + "Live birth", + "Stillbirth", + "Miscarriage", + "Other" + ], + "openmrs_choice_ids": { + "Live birth": "151849AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Stillbirth": "125872AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Miscarriage": "48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.preg_outcome.v_required.err}}" + } + }, + { + "key": "miscarriage_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "165248AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{anc_pregnancy_outcome.step1.miscarriage_date.hint}}", + "expanded": false, + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.miscarriage_date.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "delivery_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "5599AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{anc_pregnancy_outcome.step1.delivery_date.hint}}", + "expanded": false, + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.delivery_date.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "delivery_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1572AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.delivery_place.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.delivery_place.values[0]}}", + "{{anc_pregnancy_outcome.step1.delivery_place.values[1]}}", + "{{anc_pregnancy_outcome.step1.delivery_place.values[2]}}" + ], + "keys": [ + "Home", + "Health facility", + "Other" + ], + "openmrs_choice_ids": { + "Home": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Health facility": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.delivery_place.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "birth_place_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{anc_pregnancy_outcome.step1.birth_place_name.hint}}", + "edit_type": "name", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "baby_label", + "type": "label", + "text": "{{anc_pregnancy_outcome.step1.baby_label.text}}", + "left_padding": "20dp", + "right_padding": "20dp", + "text_size": "7sp", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fam_name", + "type": "hidden" + }, + { + "key": "no_children", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "164894AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "hidden" + }, + { + "key": "no_children_no", + "type": "repeating_group", + "reference_edit_text_hint": "{{anc_pregnancy_outcome.step1.no_children_no.reference_edit_text_hint}}", + "repeating_group_max": "10", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + }, + "v_required": { + "value": true, + "err": "{{anc_pregnancy_outcome.step1.no_children_no.v_required.err}}" + }, + "value": [ + { + "key": "surname", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{anc_pregnancy_outcome.step1.surname.hint}}", + "edit_type": "name", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{anc_pregnancy_outcome.step1.surname.v_regex.err}}" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.surname.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-dynamic": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "same_as_fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "openmrs_data_type": "text", + "type": "check_box", + "options": [ + { + "key": "same_as_fam_name", + "text": "{{anc_pregnancy_outcome.step1.same_as_fam_name.same_as_fam_name.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "first_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "first_name", + "type": "edit_text", + "hint": "{{anc_pregnancy_outcome.step1.first_name.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.first_name.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{anc_pregnancy_outcome.step1.first_name.v_regex.err}}" + } + }, + { + "key": "middle_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "middle_name", + "type": "edit_text", + "hint": "{{anc_pregnancy_outcome.step1.middle_name.hint}}", + "edit_type": "name", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{anc_pregnancy_outcome.step1.middle_name.v_regex.err}}" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdate", + "type": "hidden" + }, + { + "key": "gender", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "gender", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.gender.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.gender.values[0]}}", + "{{anc_pregnancy_outcome.step1.gender.values[1]}}" + ], + "keys": [ + "Male", + "Female" + ], + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.gender.v_required.err}}" + } + }, + { + "key": "lbw", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1431AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.lbw.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{anc_pregnancy_outcome.step1.lbw.values[0]}}", + "{{anc_pregnancy_outcome.step1.lbw.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1", + "No": "0" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.lbw.v_required.err}}" + } + }, + { + "key": "early_bf_1hr", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "161543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.early_bf_1hr.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{anc_pregnancy_outcome.step1.early_bf_1hr.values[0]}}", + "{{anc_pregnancy_outcome.step1.early_bf_1hr.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.early_bf_1hr.v_required.err}}" + } + }, + { + "key": "disabilities", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "159522AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.disabilities.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{anc_pregnancy_outcome.step1.disabilities.values[0]}}", + "{{anc_pregnancy_outcome.step1.disabilities.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.disabilities.v_required.err}}" + } + }, + { + "key": "essential_newborn_care", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "essential_newborn_care", + "type": "check_box", + "label": "{{anc_pregnancy_outcome.step1.essential_newborn_care.label}}", + "label_text_style": "normal", + "text_color": "#C0C0C0", + "exclusive": [ + "chk_none" + ], + "options": [ + { + "key": "chk_none", + "text": "{{anc_pregnancy_outcome.step1.essential_newborn_care.options.chk_none.text}}", + "value": false, + "openmrs_entity": "concept", + "openmrs_entity_id": "1107AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + { + "key": "chk_chlorhexidine", + "text": "{{anc_pregnancy_outcome.step1.essential_newborn_care.options.chk_chlorhexidine.text}}", + "value": false, + "openmrs_entity": "concept", + "openmrs_entity_id": "73263AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + { + "key": "chk_skin_contact", + "text": "{{anc_pregnancy_outcome.step1.essential_newborn_care.options.chk_skin_contact.text}}", + "value": false, + "openmrs_entity": "concept", + "openmrs_entity_id": "164173AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + ] + }, + { + "key": "opv0_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "opv0_date", + "type": "date_picker", + "hint": "{{anc_pregnancy_outcome.step1.opv0_date.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:delivery_date)", + "err": "{{anc_pregnancy_outcome.step1.opv0_date.constraints.date.err}}" + } + ] + }, + { + "key": "bcg_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "opv0_date", + "type": "date_picker", + "hint": "{{anc_pregnancy_outcome.step1.bcg_date.hint}}", + "expanded": false, + "max_date": "today", + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:delivery_date)", + "err": "{{anc_pregnancy_outcome.step1.bcg_date.constraints.date.err}}" + } + ] + } + ] + }, + { + "key": "stillbirth_classification", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1572AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.stillbirth_classification.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.stillbirth_classification.values[0]}}", + "{{anc_pregnancy_outcome.step1.stillbirth_classification.values[1]}}", + "{{anc_pregnancy_outcome.step1.stillbirth_classification.values[2]}}" + ], + "keys": [ + "Intrapartum stillbirth (Fresh)", + "Antepartum stillbirth (Macerated)", + "Unknown timing" + ], + "openmrs_choice_ids": { + "Intrapartum stillbirth (Fresh)": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Antepartum stillbirth (Macerated)": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Unknown timing": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.stillbirth_classification.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "del_attendant", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1572AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.del_attendant.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.del_attendant.values[0]}}", + "{{anc_pregnancy_outcome.step1.del_attendant.values[1]}}", + "{{anc_pregnancy_outcome.step1.del_attendant.values[2]}}", + "{{anc_pregnancy_outcome.step1.del_attendant.values[3]}}" + ], + "keys": [ + "Doctor", + "Nurse", + "Midwife", + "Other" + ], + "openmrs_choice_ids": { + "Doctor": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Midwife": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.del_attendant.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "del_attendant_other", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{anc_pregnancy_outcome.step1.del_attendant_other.hint}}", + "edit_type": "name", + "relevance": { + "step1:del_attendant": { + "type": "string", + "ex": "equalTo(., \"Other\")" + } + } + }, + { + "key": "del_mode", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1572AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.del_mode.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.del_mode.values[0]}}", + "{{anc_pregnancy_outcome.step1.del_mode.values[1]}}", + "{{anc_pregnancy_outcome.step1.del_mode.values[2]}}", + "{{anc_pregnancy_outcome.step1.del_mode.values[3]}}", + "{{anc_pregnancy_outcome.step1.del_mode.values[4]}}" + ], + "keys": [ + "C-Section", + "Forceps", + "Normal delivery", + "Vacuum", + "Unknown" + ], + "openmrs_choice_ids": { + "C-Section": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Forceps": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Normal delivery": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Vacuum": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Unknown": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.del_mode.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "type_of_pregnancy", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1572AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.type_of_pregnancy.hint}}", + "values": [ + "{{anc_pregnancy_outcome.step1.type_of_pregnancy.values[0]}}", + "{{anc_pregnancy_outcome.step1.type_of_pregnancy.values[1]}}", + "{{anc_pregnancy_outcome.step1.type_of_pregnancy.values[2]}}", + "{{anc_pregnancy_outcome.step1.type_of_pregnancy.values[3]}}", + "{{anc_pregnancy_outcome.step1.type_of_pregnancy.values[4]}}" + ], + "keys": [ + "Unique", + "Jumeaux", + "Triplé", + "Autre", + "Inconnu" + ], + "openmrs_choice_ids": { + "Singleton": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Twin": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Triplet": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Unknown": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.type_of_pregnancy.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "birth_weight", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{anc_pregnancy_outcome.step1.birth_weight.label}}", + "hint": "{{anc_pregnancy_outcome.step1.birth_weight.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.birth_weight.v_numeric.err}}" + }, + "v_min": { + "value": "500", + "err": "{{anc_pregnancy_outcome.step1.birth_weight.v_min.err}}" + }, + "v_max": { + "value": "6000", + "err": "{{anc_pregnancy_outcome.step1.birth_weight.v_max.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + }, + { + "key": "link_to_father", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "161033AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{anc_pregnancy_outcome.step1.link_to_father.hint}}", + "expanded": false, + "v_required": { + "value": "true", + "err": "{{anc_pregnancy_outcome.step1.link_to_father.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "anc_pregnancy_outcome_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "anc_pregnancy_outcome" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/birth_certification.json b/opensrp-chw/src/crvs/assets/json.form/birth_certification.json new file mode 100644 index 0000000000..bed6f32f47 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/birth_certification.json @@ -0,0 +1,356 @@ +{ + "count": "1", + "encounter_type": "Birth Certification", + "entity_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "" + }, + "step1": { + "title": "{{birth_certification.step1.title}}", + "fields": [ + { + "key": "birth_cert", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "165406AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification.step1.birth_cert.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification.step1.birth_cert.values[0]}}", + "{{birth_certification.step1.birth_cert.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": true, + "err": "{{birth_certification.step1.birth_cert.v_required.err}}" + } + }, + { + "key": "birth_registration", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegistration", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification.step1.birth_registration.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification.step1.birth_registration.values[0]}}", + "{{birth_certification.step1.birth_registration.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": true, + "err": "{{birth_certification.step1.birth_registration.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_cert_issue_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "164129AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{birth_certification.step1.birth_cert_issue_date.hint}}", + "expanded": false, + "max_date": "today", + "min_date": "today-120y", + "v_required": { + "value": "true", + "err": "{{birth_certification.step1.birth_cert_issue_date.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_cert_num", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "162052AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "label", + "text": "{{birth_certification.step1.birth_cert_num.hint}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_cert_num_acte", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthCertNumActe", + "type": "edit_text", + "hint": "{{birth_certification.step1.birth_cert_num_acte.hint}}", + "v_required": { + "value": "true", + "err": "{{birth_certification.step1.birth_cert_num_acte.v_required.err}}" + }, + "v_numeric": { + "value": "true", + "err": "{{birth_certification.step1.birth_cert_num_acte.v_numeric.error}}" + }, + "v_max_length": { + "value": "5", + "err": "{{birth_certification.step1.birth_cert_num_acte.v_max_length.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_cert_num_volume", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "text", + "openmrs_entity_id": "birthCertNumVolume", + "type": "edit_text", + "hint": "{{birth_certification.step1.birth_cert_num_volume.hint}}", + "v_required": { + "value": "true", + "err": "{{birth_certification.step1.birth_cert_num_volume.v_required.err}}" + }, + "v_regex": { + "value": "([0-9]{1,4}\\/[0-9]{1,4})", + "err": "{{birth_certification.step1.birth_cert_num_volume.v_regex.error}}" + }, + "v_max_length": { + "value": "9", + "err": "{{birth_certification.step1.birth_cert_num_volume.v_max_length.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_cert_num_folio", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "text", + "openmrs_entity_id": "birthCertNumFolio", + "type": "edit_text", + "hint": "{{birth_certification.step1.birth_cert_num_folio.hint}}", + "v_required": { + "value": "true", + "err": "{{birth_certification.step1.birth_cert_num_folio.v_required.err}}" + }, + "v_max_length": { + "value": "6", + "err": "{{birth_certification.step1.birth_cert_num_folio.v_max_length.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + + }, + + { + "key": "birth_notification", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "165405AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification.step1.birth_notification.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification.step1.birth_notification.values[0]}}", + "{{birth_certification.step1.birth_notification.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": false, + "err": "{{birth_certification.step1.birth_notification.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "caregiverinstroductions", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{birth_certification.step1.caregiverinstroductions.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "system_birth_notification", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "systemBirthNotification", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification.step1.system_birth_notification.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification.step1.system_birth_notification.values[0]}}", + "{{birth_certification.step1.system_birth_notification.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_reg_type", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegType", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification.step1.birth_reg_type.hint}}", + "values": [ + "{{birth_certification.step1.birth_reg_type.values[0]}}", + "{{birth_certification.step1.birth_reg_type.values[1]}}", + "{{birth_certification.step1.birth_reg_type.values[2]}}", + "{{birth_certification.step1.birth_reg_type.values[3]}}", + "{{birth_certification.step1.birth_reg_type.values[4]}}" + ], + "keys": [ + "Both Parents", + "Self", + "Informant Only", + "Mother Only", + "Father Only" + ], + "v_required": { + "value": true, + "err": "{{birth_certification.step1.birth_reg_type.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "informant_reason", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantReason", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{birth_certification.step1.informant_reason.hint}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "birth_certification" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/birth_certification_changed.json b/opensrp-chw/src/crvs/assets/json.form/birth_certification_changed.json new file mode 100644 index 0000000000..b7d2021a60 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/birth_certification_changed.json @@ -0,0 +1,340 @@ +{ + "count": "1", + "encounter_type": "Update Birth Certification", + "entity_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "" + }, + "step1": { + "title": "{{birth_certification_changed.step1.title}}", + "fields": [ + { + "key": "birth_cert", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "165406AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification_changed.step1.birth_cert.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification_changed.step1.birth_cert.values[0]}}", + "{{birth_certification_changed.step1.birth_cert.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": true, + "err": "{{birth_certification_changed.step1.birth_cert.v_required.err}}" + } + }, + { + "key": "birth_registration", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegistration", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification_changed.step1.birth_registration.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification_changed.step1.birth_registration.values[0]}}", + "{{birth_certification_changed.step1.birth_registration.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": true, + "err": "{{birth_certification_changed.step1.birth_registration.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "birth_notification", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "165405AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification_changed.step1.birth_notification.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification_changed.step1.birth_notification.values[0]}}", + "{{birth_certification_changed.step1.birth_notification.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": true, + "err": "{{birth_certification_changed.step1.birth_notification.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "birth_cert_issue_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "164129AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{birth_certification_changed.step1.birth_cert_issue_date.hint}}", + "expanded": false, + "max_date": "today", + "min_date": "today-120y", + "v_required": { + "value": "true", + "err": "{{birth_certification_changed.step1.birth_cert_issue_date.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "birth_cert_num", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "162052AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "label", + "text": "{{birth_certification_changed.step1.birth_cert_num.hint}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "birth_cert_num_acte", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthCertNumActe", + "type": "edit_text", + "hint": "{{birth_certification_changed.step1.birth_cert_num_acte.hint}}", + "v_required": { + "value": "true", + "err": "{{birth_certification_changed.step1.birth_cert_num_acte.v_required.err}}" + }, + "v_numeric": { + "value": "true", + "err": "{{birth_certification_changed.step1.birth_cert_num_acte.v_numeric.error}}" + }, + "v_max_length": { + "value": "5", + "err": "{{birth_certification_changed.step1.birth_cert_num_acte.v_max_length.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "birth_cert_num_volume", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "text", + "openmrs_entity_id": "birthCertNumVolume", + "type": "edit_text", + "hint": "{{birth_certification_changed.step1.birth_cert_num_volume.hint}}", + "v_required": { + "value": "true", + "err": "{{birth_certification_changed.step1.birth_cert_num_volume.v_required.err}}" + }, + "v_regex": { + "value": "([0-9]{1,4}\\/[0-9]{1,4})", + "err": "{{birth_certification_changed.step1.birth_cert_num_volume.v_regex.error}}" + }, + + "v_max_length": { + "value": "9", + "err": "{{birth_certification_changed.step1.birth_cert_num_volume.v_max_length.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "birth_cert_num_folio", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "text", + "openmrs_entity_id": "birthCertNumFolio", + "type": "edit_text", + "hint": "{{birth_certification_changed.step1.birth_cert_num_folio.hint}}", + "v_required": { + "value": "true", + "err": "{{birth_certification_changed.step1.birth_cert_num_folio.v_required.err}}" + }, + "v_max_length": { + "value": "6", + "err": "{{birth_certification_changed.step1.birth_cert_num_folio.v_max_length.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_intro_relevance_rule.yml" + } + } + } + }, + { + "key": "system_birth_notification", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "systemBirthNotification", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification_changed.step1.system_birth_notification.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{birth_certification_changed.step1.system_birth_notification.values[0]}}", + "{{birth_certification_changed.step1.system_birth_notification.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "birth_reg_type", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegType", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{birth_certification_changed.step1.birth_reg_type.hint}}", + "values": [ + "{{birth_certification_changed.step1.birth_reg_type.values[0]}}", + "{{birth_certification_changed.step1.birth_reg_type.values[1]}}", + "{{birth_certification_changed.step1.birth_reg_type.values[2]}}", + "{{birth_certification_changed.step1.birth_reg_type.values[3]}}", + "{{birth_certification_changed.step1.birth_reg_type.values[4]}}" + ], + "keys": [ + "Both Parents", + "Self", + "Informant Only", + "Mother Only", + "Father Only" + ], + "v_required": { + "value": true, + "err": "{{birth_certification_changed.step1.birth_reg_type.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + }, + { + "key": "informant_reason", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantReason", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{birth_certification_changed.step1.informant_reason.hint}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "birth_certification_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "birth_certification_changed" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/child_enrollment.json b/opensrp-chw/src/crvs/assets/json.form/child_enrollment.json new file mode 100644 index 0000000000..dab3194cc4 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/child_enrollment.json @@ -0,0 +1,833 @@ +{ + "count": "1", + "encounter_type": "Child Registration", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{child_enrollment.step1.title}}", + "fields": [ + { + "key": "photo", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "choose_image", + "uploadButtonText": "{{child_enrollment.step1.photo.uploadButtonText}}" + }, + { + "key": "unique_id", + "openmrs_entity_parent": "", + "openmrs_entity": "person_identifier", + "openmrs_entity_id": "opensrp_id", + "type": "edit_text", + "hint": "{{child_enrollment.step1.unique_id.hint}}", + "read_only": "true", + "value": "0", + "v_numeric": { + "value": "true", + "err": "{{child_enrollment.step1.unique_id.v_numeric.err}}" + }, + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.unique_id.v_required.err}}" + } + }, + { + "key": "surname", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{child_enrollment.step1.surname.hint}}", + "edit_type": "name", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{child_enrollment.step1.surname.v_regex.err}}" + }, + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.surname.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "same_as_fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "openmrs_data_type": "text", + "type": "check_box", + "label": "{{child_enrollment.step1.same_as_fam_name.label}}", + "exclusive": [ + "none" + ], + "options": [ + { + "key": "same_as_fam_name", + "text": "{{child_enrollment.step1.same_as_fam_name.options.same_as_fam_name.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "hidden": "true" + }, + { + "key": "surname_calculation", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "last_name", + "type": "hidden", + "hint": "{{child_enrollment.step1.surname_calculation.hint}}", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-calculation.yml" + } + } + } + }, + { + "key": "first_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "first_name", + "openmrs_data_type": "text", + "type": "edit_text", + "expanded": false, + "hint": "{{child_enrollment.step1.first_name.hint}}", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.first_name.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{child_enrollment.step1.first_name.v_regex.err}}" + } + }, + { + "key": "middle_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "middle_name", + "openmrs_data_type": "text", + "type": "edit_text", + "expanded": false, + "hint": "{{child_enrollment.step1.middle_name.hint}}", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{child_enrollment.step1.middle_name.v_regex.err}}" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdate", + "type": "date_picker", + "hint": "{{child_enrollment.step1.dob.hint}}", + "expanded": false, + "duration": { + "label": "{{child_enrollment.step1.dob.duration.label}}" + }, + "min_date": "today-5y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.dob.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "dob_estimated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "check_box", + "label": "{{child_enrollment.step1.dob_estimated.label}}", + "options": [ + { + "key": "dob_estimated", + "text": "{{child_enrollment.step1.dob_estimated.options.dob_estimated.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "hidden": "true", + "type": "check_box", + "label": "{{child_enrollment.step1.dob_unknown.label}}", + "options": [ + { + "key": "dob_unknown", + "text": "{{child_enrollment.step1.dob_unknown.options.dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "age", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{child_enrollment.step1.age.hint}}", + "v_numeric": { + "value": "true", + "err": "{{child_enrollment.step1.age.v_numeric.err}}" + }, + "v_min": { + "value": "15", + "err": "{{child_enrollment.step1.age.v_min.err}}" + }, + "v_max": { + "value": "120", + "err": "{{child_enrollment.step1.age.v_max.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + }, + "v_required": { + "value": true, + "err": "{{child_enrollment.step1.age.v_required.err}}" + } + }, + { + "key": "gender", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "gender", + "type": "spinner", + "hint": "{{child_enrollment.step1.gender.hint}}", + "values": [ + "{{child_enrollment.step1.gender.values[0]}}", + "{{child_enrollment.step1.gender.values[1]}}" + ], + "keys": [ + "Male", + "Female" + ], + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.gender.v_required.err}}" + } + }, + { + "key": "early_bf_1hr", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "161543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "spinner", + "hint": "{{child_enrollment.step1.early_bf_1hr.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{child_enrollment.step1.early_bf_1hr.values[0]}}", + "{{child_enrollment.step1.early_bf_1hr.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.early_bf_1hr.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "birth_place_type", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthPlaceType", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.birth_place_type.hint}}", + "values": [ + "{{child_enrollment.step1.birth_place_type.value[0]}}", + "{{child_enrollment.step1.birth_place_type.value[1]}}", + "{{child_enrollment.step1.birth_place_type.value[2]}}" + ], + "keys": [ + "Home", + "Health facility", + "Other" + ], + "openmrs_choice_ids": { + "Home": "home", + "Health facility": "health_facility", + "Other": "other" + }, + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.birth_place_type.error}}" + } + }, + { + "key": "birth_place_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthPlaceName", + "openmrs_data_type": "text", + "type": "edit_text", + "expanded": false, + "hint": "{{child_enrollment.step1.birth_place_name.hint}}" + }, + { + "key": "no_children", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "noChildren", + "openmrs_data_type": "text", + "type": "edit_text", + "expanded": false, + "hint": "{{child_enrollment.step1.no_children.hint}}", + "v_numeric": { + "value": "true", + "err": "{{child_enrollment.step1.no_children.v_numeric.error}}" + } + }, + { + "key": "del_attendant", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "delAttendant", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.del_attendant.hint}}", + "values": [ + "{{child_enrollment.step1.del_attendant.value[0]}}", + "{{child_enrollment.step1.del_attendant.value[1]}}", + "{{child_enrollment.step1.del_attendant.value[2]}}", + "{{child_enrollment.step1.del_attendant.value[3]}}" + ], + "keys": [ + "Doctor", + "Nurse", + "Midwife", + "Other" + ], + "openmrs_choice_ids": { + "Doctor": "docotor", + "Nurse": "nurser", + "Midwife": "midwife", + "Other": "other" + } + }, + { + "key": "del_mode", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "delMode", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.del_mode.hint}}", + "values": [ + "{{child_enrollment.step1.del_mode.value[0]}}", + "{{child_enrollment.step1.del_mode.value[1]}}", + "{{child_enrollment.step1.del_mode.value[2]}}", + "{{child_enrollment.step1.del_mode.value[3]}}", + "{{child_enrollment.step1.del_mode.value[4]}}" + ], + "keys": [ + "C-Section", + "Forceps", + "Normal delivery", + "Vacuum", + "Unknown" + ], + "openmrs_choice_ids": { + "C-Section": "c_section", + "Forceps": "forceps", + "Normal delivery": "normal_delivery", + "Vacuum": "vacuum", + "Unknown": "unknown" + } + }, + { + "key": "type_of_pregnancy", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "typeOfPregnancy", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.type_of_pregnancy.hint}}", + "values": [ + "{{child_enrollment.step1.type_of_pregnancy.value[0]}}", + "{{child_enrollment.step1.type_of_pregnancy.value[1]}}", + "{{child_enrollment.step1.type_of_pregnancy.value[2]}}", + "{{child_enrollment.step1.type_of_pregnancy.value[3]}}", + "{{child_enrollment.step1.type_of_pregnancy.value[4]}}" + ], + "keys": [ + "Singleton", + "Twin", + "Triplet", + "Other", + "Unknown" + ], + "openmrs_choice_ids": { + "Singleton": "singleton", + "Twin": "twin", + "Triplet": "triplet", + "Other": "other", + "Unknown": "unknown" + }, + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.type_of_pregnancy.error}}" + } + }, + { + "key": "birth_weight", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "Baby Weight", + "hint": "{{child_enrollment.step1.birth_weight.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{child_enrollment.step1.birth_weight.v_numeric.error}}" + }, + "v_min": { + "value": "500", + "err": "{{child_enrollment.step1.birth_weight.v_min.error}}" + }, + "v_max": { + "value": "6000", + "err": "{{child_enrollment.step1.birth_weight.v_max.error}}" + } + }, + { + "key": "mother_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherName", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{child_enrollment.step1.mother_name.hint}}", + "look_up": "true", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.mother_name.error}}" + } + }, + { + "key": "mother_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherId", + "type": "edit_text", + "hint": "{{child_enrollment.step1.mother_id.hint}}", + "edit_type": "name" + }, + { + "key": "mother_dob_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherBirthDate", + "type": "date_picker", + "hint": "{{child_enrollment.step1.mother_dob_entered.hint}}", + "expanded": false, + "duration": { + "label": "{{child_enrollment.step1.mother_dob_entered.label}}" + }, + "min_date": "today-120y", + "max_date": "today-10y", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.mother_dob_entered.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "mother_dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "type": "check_box", + "options": [ + { + "key": "dob_unknown", + "text": "{{child_enrollment.step1.mother_dob_unknown.label}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "mother_age_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{child_enrollment.step1.mother_age_entered.hint}}", + "v_numeric": { + "value": "true", + "err": "{{child_enrollment.step1.mother_age_entered.v_numeric.error}}" + }, + "v_min": { + "value": "5", + "err": "{{child_enrollment.step1.mother_age_entered.v_min.error}}" + }, + "v_max": { + "value": "120", + "err": "{{child_enrollment.step1.mother_age_entered.v_max.error}}" + }, + "v_required": { + "value": true, + "err": "{{child_enrollment.step1.mother_age_entered.v_required.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "mother_marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.mother_marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.mother_marital_status.error}}" + }, + "values": [ + "{{mother_marital_status.step1.del_attendant.value[0]}}", + "{{mother_marital_status.step1.del_attendant.value[1]}}", + "{{mother_marital_status.step1.del_attendant.value[2]}}", + "{{mother_marital_status.step1.del_attendant.value[3]}}" + ], + "keys": [ + "Married", + "Co-habiting", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Married": "married", + "Co-habiting": "co_habitting", + "Single": "single", + "Widowed": "widowed" + } + }, + { + "key": "mother_highest_edu_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "mother_highest_edu_level", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.mother_highest_edu_level.hint}}", + "values": [ + "{{child_enrollment.step1.mother_highest_edu_level.value[0]}}", + "{{child_enrollment.step1.mother_highest_edu_level.value[1]}}", + "{{child_enrollment.step1.mother_highest_edu_level.value[2]}}", + "{{child_enrollment.step1.mother_highest_edu_level.value[3]}}", + "{{child_enrollment.step1.mother_highest_edu_level.value[4]}}" + ], + "keys": [ + "None", + "Literacy", + "Primary", + "Secondary", + "University" + ], + "openmrs_choice_ids": { + "None": "none", + "Literacy": "literacy", + "Primary": "primary", + "Secondary": "secondary", + "University": "university" + } + }, + { + "key": "mother_usual_residence", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherUsualResidence", + "type": "edit_text", + "hint": "{{child_enrollment.step1.mother_usual_residence.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.mother_usual_residence.error}}" + } + }, + { + "key": "mother_birth_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherBirthPlace", + "type": "edit_text", + "hint": "{{child_enrollment.step1.mother_birth_place.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{child_enrollment.step1.mother_birth_place.error}}" + } + }, + { + "key": "father_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherName", + "type": "edit_text", + "hint": "{{child_enrollment.step1.father_name.hint}}", + "edit_type": "name" + }, + { + "key": "father_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherId", + "type": "edit_text", + "hint": "{{child_enrollment.step1.father_id.hint}}", + "edit_type": "name" + }, + { + "key": "father_dob_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherBirthDate", + "type": "date_picker", + "hint": "{{child_enrollment.step1.father_dob_entered.hint}}", + "expanded": false, + "duration": { + "label": "Age" + }, + "min_date": "today-120y", + "max_date": "today-10y", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "father_dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "type": "check_box", + "options": [ + { + "key": "dob_unknown", + "text": "{{child_enrollment.step1.father_dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "father_age_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{child_enrollment.step1.father_age_entered.hint}}", + "v_numeric": { + "value": "true", + "err": "{{child_enrollment.step1.father_age_entered.v_numeric.error}}" + }, + "v_min": { + "value": "5", + "err": "{{child_enrollment.step1.father_age_entered.v_min.error}}" + }, + "v_max": { + "value": "120", + "err": "{{child_enrollment.step1.father_age_entered.v_max.error}}" + }, + "v_required": { + "value": true, + "err": "{{child_enrollment.step1.father_age_entered.v_required.error}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-child-relevance.yml" + } + } + } + }, + { + "key": "father_marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.father_marital_status.hint}}", + "values": [ + "{{mother_marital_status.step1.father_marital_status.value[0]}}", + "{{mother_marital_status.step1.father_marital_status.value[1]}}", + "{{mother_marital_status.step1.father_marital_status.value[2]}}", + "{{mother_marital_status.step1.father_marital_status.value[3]}}" + ], + "keys": [ + "Married", + "Co-habiting", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Married": "married", + "Co-habiting": "ch_habitig", + "Single": "single", + "Widowed": "widowed" + } + }, + { + "key": "father_highest_edu_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{child_enrollment.step1.father_highest_edu_level.hint}}", + "values": [ + "{{child_enrollment.step1.father_highest_edu_level.value[0]}}", + "{{child_enrollment.step1.father_highest_edu_level.value[1]}}", + "{{child_enrollment.step1.father_highest_edu_level.value[2]}}", + "{{child_enrollment.step1.father_highest_edu_level.value[3]}}", + "{{child_enrollment.step1.father_highest_edu_level.value[4]}}" + ], + "keys": [ + "None", + "Literacy", + "Primary", + "Secondary", + "University" + ], + "openmrs_choice_ids": { + "None": "none", + "Literacy": "literacy", + "Primary": "primary", + "Secondary": "secondary", + "University": "university" + } + }, + { + "key": "father_usual_residence", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherUsualResidence", + "type": "edit_text", + "hint": "{{child_enrollment.step1.father_usual_residence.hint}}", + "edit_type": "name" + }, + { + "key": "father_birth_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherBirthPlace", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{child_enrollment.step1.father_birth_place.hint}}", + "look_up": "true", + "edit_type": "name" + } + ] + }, + "properties_file_name": "child_enrollment" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/death_certification.json b/opensrp-chw/src/crvs/assets/json.form/death_certification.json new file mode 100644 index 0000000000..845ed371a3 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/death_certification.json @@ -0,0 +1,449 @@ +{ + "count": "1", + "encounter_type": "Update Death Certification", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{death_certification.step1.title}}", + "fields": [ + { + "key": "received_death_certificate", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "receivedDeathCertificate", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{death_certification.step1.received_death_certificate.hint}}", + "values": [ + "{{death_certification.step1.received_death_certificate.values[0]}}", + "{{death_certification.step1.received_death_certificate.values[1]}}" + ], + "keys": [ + "Yes", + "No" + ], + "openmrs_choice_ids": { + "Yes": "160034AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "160415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{death_certification.step1.received_death_certificate.v_required.err}}" + } + }, + { + "key": "death_certificate_issue_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificateIssueDate", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{death_certification.step1.death_certificate_issue_date.label}}", + "hint": "{{death_certification.step1.death_certificate_issue_date.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{death_certification.step1.death_certificate_issue_date.v_required.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumber", + "text": "{{death_certification.step1.death_certificate_number.hint}}", + "type": "label", + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number_acte", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumberActe", + "label": "Acte No.", + "hint": "{{death_certification.step1.death_certificate_number_acte.hint}}", + "type": "edit_text", + "v_max_length": { + "value": "5", + "err": "Characters must be less than or equal to 5" + }, + "v_numeric": { + "value": "true", + "err": "{{death_certification.step1.death_certificate_number.v_numeric.err}}" + }, + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number_volume", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumberVolume", + "label": "Volume No.", + "hint": "{{death_certification.step1.death_certificate_number_volume.hint}}", + "type": "edit_text", + "v_regex": { + "value": "([0-9]{1,4}\\/[0-9]{1,4})", + "err": "{{death_certification.step1.death_certificate_number_volume.v_regex.error}}" + }, + "v_max_length": { + "value": "9", + "err": "{{death_certification.step1.death_certificate_number_volume.v_max_length.error}}" + }, + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number_folio", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumberFolio", + "label": "Folio No.", + "hint": "{{death_certification.step1.death_certificate_number_folio.hint}}", + "type": "edit_text", + "v_max_length": { + "value": "6", + "err": "{{death_certification.step1.death_certificate_number_folio.v_max_length.error}}" + }, + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_notification_done", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathNotificationDone", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{death_certification.step1.death_notification_done.hint}}", + "values": [ + "{{death_certification.step1.death_notification_done.values[0]}}", + "{{death_certification.step1.death_notification_done.values[1]}}" + ], + "keys": [ + "Yes", + "No" + ], + "openmrs_choice_ids": { + "Yes": "160034AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "160415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"No\")" + } + } + }, + { + "key": "informant_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{death_certification.step1.informant_fields.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "informant_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.informant_name.label}}", + "hint": "{{death_certification.step1.informant_name.hint}}", + "type": "edit_text", + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "informant_relationship", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{death_certification.step1.informant_relationship.hint}}", + "values": [ + "{{death_certification.step1.informant_relationship.values[0]}}", + "{{death_certification.step1.informant_relationship.values[1]}}", + "{{death_certification.step1.informant_relationship.values[2]}}", + "{{death_certification.step1.informant_relationship.values[3]}}", + "{{death_certification.step1.informant_relationship.values[4]}}" + ], + "keys": [ + "Parent", + "Spouse", + "Sibling", + "Other Relative", + "Other" + ], + "openmrs_choice_ids": { + "Sibling": "sibling_id_openmrs", + "Spouse": "spouse_id_openmrs", + "Parent": "parent_id_openmrs", + "Other Relative": "other_relative_id_openmrs", + "Other": "other_id_openmrs" + }, + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "informant_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.informant_address.label}}", + "hint": "{{death_certification.step1.informant_address.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "informant_phone", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.informant_phone.label}}", + "hint": "{{death_certification.step1.informant_phone.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{death_certification.step1.informant_phone.v_numeric.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "official_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{death_certification.step1.official_fields.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "official_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.official_name.label}}", + "hint": "{{death_certification.step1.official_name.hint}}", + "type": "edit_text", + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "official_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialId", + "label": "{{death_certification.step1.official_id.label}}", + "hint": "{{death_certification.step1.official_id.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "official_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.official_position.label}}", + "hint": "{{death_certification.step1.official_position.hint}}", + "type": "edit_text", + "v_required": { + "value": "true", + "err": "{{death_certification.step1.mandatory_field.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "official_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.official_address.label}}", + "hint": "{{death_certification.step1.official_address.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + }, + { + "key": "official_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{death_certification.step1.official_number.label}}", + "hint": "{{death_certification.step1.official_number.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{death_certification.step1.official_number.v_numeric.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "death_certification_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "death_certification" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/family_details_remove_child.json b/opensrp-chw/src/crvs/assets/json.form/family_details_remove_child.json new file mode 100644 index 0000000000..8eafabd877 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/family_details_remove_child.json @@ -0,0 +1,891 @@ +{ + "count": "1", + "encounter_type": "Remove Child Under 5", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{family_details_remove_child.step1.title}}", + "fields": [ + { + "key": "spacer", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "spacer", + "spacer_height": "10sp" + }, + { + "key": "details", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{family_details_remove_child.step1.details.text}}", + "text_size": "25px" + }, + { + "key": "hiddengender", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "edit_type": "name", + "read_only": "true" + }, + { + "key": "remove_reason", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.remove_reason.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.remove_reason.v_required.err}}" + }, + "values": [ + "{{family_details_remove_child.step1.remove_reason.values[0]}}", + "{{family_details_remove_child.step1.remove_reason.values[1]}}", + "{{family_details_remove_child.step1.remove_reason.values[2]}}" + ], + "keys": [ + "Died", + "Moved away", + "Other" + ], + "openmrs_choice_ids": { + "Died": "160034AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Moved away": "160415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "spacer", + "expanded": false, + "read_only": "true", + "hidden": "false" + }, + { + "key": "date_moved", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "164133AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{family_details_remove_child.step1.date_moved.label}}", + "hint": "{{family_details_remove_child.step1.date_moved.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.date_moved.v_required.err}}" + }, + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:dob)", + "err": "{{family_details_remove_child.step1.date_moved.constraints.err}}" + } + ], + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Moved away\")" + } + } + }, + { + "key": "date_died", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{family_details_remove_child.step1.date_died.label}}", + "hint": "{{family_details_remove_child.step1.date_died.hint}}", + "expanded": false, + "min_date": "today-80y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.date_died.v_required.err}}" + }, + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:dob)", + "err": "{{family_details_remove_child.step1.date_died.constraints.err}}" + } + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "age_at_death", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_child.step1.age_at_death.label}}", + "hint": "{{family_details_remove_child.step1.age_at_death.hint}}", + "type": "edit_text", + "read_only": "true", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + }, + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "child_remove_calculation.yml" + } + } + } + }, + { + "key": "age_at_death_calculation", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_child.step1.age_at_death.label}}", + "hint": "{{family_details_remove_child.step1.age_at_death.hint}}", + "type": "edit_text", + "read_only": "true", + "hidden": "true", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "child_remove_calculation.yml" + } + } + } + }, + { + "key": "death_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.death_place.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.death_place.v_required.err}}" + }, + "values": [ + "{{family_details_remove_child.step1.death_place.values[0]}}", + "{{family_details_remove_child.step1.death_place.values[1]}}", + "{{family_details_remove_child.step1.death_place.values[2]}}", + "{{family_details_remove_child.step1.death_place.values[3]}}" + ], + "keys": [ + "Health Facility", + "Home", + "Place of work", + "Other" + ], + "openmrs_choice_ids": { + "Health Facility": "health_facility_id_openmrs", + "Home": "home_id_openmrs", + "Place of work": "place_of_work_id_openmrs", + "Other": "other_id_openmrs" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "nationality", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "label": "{{family_details_remove_child.step1.nationality.label}}", + "hint": "{{family_details_remove_child.step1.nationality.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.marital_status.v_required.err}}" + }, + "values": [ + "{{family_details_remove_child.step1.marital_status.values[0]}}", + "{{family_details_remove_child.step1.marital_status.values[1]}}", + "{{family_details_remove_child.step1.marital_status.values[2]}}", + "{{family_details_remove_child.step1.marital_status.values[3]}}", + "{{family_details_remove_child.step1.marital_status.values[4]}}" + ], + "keys": [ + "Co-Habiting", + "Divorced", + "Married", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Co-Habiting": "co_habiting_id_openmrs", + "Divorced": "divorced_id_openmrs", + "Married": "married_id_openmrs", + "Single": "single_id_openmrs", + "Widowed": "widowed_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "mccd_conducted", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "mccdConducted", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.mccd_conducted.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.mccd_conducted.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.mccd_conducted.values[0]}}", + "{{family_details_remove_child.step1.mccd_conducted.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "mccd_yes_id_openmrs", + "No": "mccd_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "physician_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_child.step1.physician_name.label}}", + "hint": "{{family_details_remove_child.step1.physician_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "physician_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_child.step1.physician_position.label}}", + "hint": "{{family_details_remove_child.step1.physician_position.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "death_manner", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_child.step1.death_manner.label}}", + "hint": "{{family_details_remove_child.step1.death_manner.hint}}", + "type": "spinner", + "values": [ + "{{family_details_remove_child.step1.death_manner.values[0]}}", + "{{family_details_remove_child.step1.death_manner.values[1]}}", + "{{family_details_remove_child.step1.death_manner.values[2]}}", + "{{family_details_remove_child.step1.death_manner.values[3]}}", + "{{family_details_remove_child.step1.death_manner.values[4]}}", + "{{family_details_remove_child.step1.death_manner.values[5]}}", + "{{family_details_remove_child.step1.death_manner.values[6]}}", + "{{family_details_remove_child.step1.death_manner.values[7]}}", + "{{family_details_remove_child.step1.death_manner.values[8]}}" + ], + "keys": [ + "Disease", + "Accident", + "Intentional self harm", + "Assault", + "Legal Intervention", + "War", + "Could not determine", + "Pending investigation", + "Unknown" + ], + "openmrs_choice_ids": { + "Disease": "disease_id_openmrs", + "Accident": "accident_id_openmrs", + "Intentional self harm": "international_self_harm_id_openmrs", + "Assault": "assault_id_openmrs", + "Legal Intervention": "legal_intervention_id_openmrs", + "War": "war_id_openmrs", + "Could not determine": "could_not_determine_id_openmrs", + "Pending investigation": "pending_investigation_id_openmrs", + "Unknown": "unknown_id_openmrs" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "medically_treated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "medicallyTreated", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.medically_treated.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.medically_treated.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.medically_treated.values[0]}}", + "{{family_details_remove_child.step1.medically_treated.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "medically_treated_yes_id_openmrs", + "No": "medically_treated_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "know_death_cause", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "knowDeathCause", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.know_death_cause.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.know_death_cause.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.know_death_cause.values[0]}}", + "{{family_details_remove_child.step1.know_death_cause.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "cause_of_death_yes_id_openmrs", + "No": "cause_of_death_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "deceased_pregnant", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deceasedPregnant", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.deceased_pregnant.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.deceased_pregnant.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.deceased_pregnant.values[0]}}", + "{{family_details_remove_child.step1.deceased_pregnant.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "deceased_pregnant_yes_id_openmrs", + "No": "deceased_pregnant_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "pregnant_died", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "pregnantDied", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.pregnant_died.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_child.step1.pregnant_died.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.pregnant_died.values[0]}}", + "{{family_details_remove_child.step1.pregnant_died.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "pregnant_died_yes_id_openmrs", + "No": "pregnant_died_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "still_born_death", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "stillBornDeath", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.still_born_death.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.still_born_death.values[0]}}", + "{{family_details_remove_child.step1.still_born_death.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "still_born_death_yes_id_openmrs", + "No": "still_born_death_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "death_cause", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCause", + "label": "{{family_details_remove_child.step1.death_cause.label}}", + "hint": "{{family_details_remove_child.step1.death_cause.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_child_form_relevance.yml" + } + } + } + }, + { + "key": "death_certificate_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{family_details_remove_child.step1.death_certificate_fields.text}}", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "received_death_certificate", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "receivedDeathCertificate", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.received_death_certificate.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.received_death_certificate.values[0]}}", + "{{family_details_remove_child.step1.received_death_certificate.values[1]}}" + ], + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "death_certificate_issue_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificateIssueDate", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{family_details_remove_child.step1.death_certificate_issue_date.label}}", + "hint": "{{family_details_remove_child.step1.death_certificate_issue_date.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificateNumber", + "label": "{{family_details_remove_child.step1.death_certificate_number.label}}", + "hint": "{{family_details_remove_child.step1.death_certificate_number.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_child.step1.death_certificate_number.v_numeric.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_notification_done", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathNotificationDone", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.death_notification_done.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_child.step1.death_notification_done.values[0]}}", + "{{family_details_remove_child.step1.death_notification_done.values[1]}}" + ], + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"No\")" + } + } + }, + { + "key": "informant_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{family_details_remove_child.step1.informant_fields.text}}", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "informant_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantName", + "label": "{{family_details_remove_child.step1.informant_name.label}}", + "hint": "{{family_details_remove_child.step1.informant_name.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "informant_relationship", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantRelationship", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_child.step1.informant_relationship.hint}}", + "values": [ + "{{family_details_remove_child.step1.informant_relationship.values[0]}}", + "{{family_details_remove_child.step1.informant_relationship.values[1]}}", + "{{family_details_remove_child.step1.informant_relationship.values[2]}}", + "{{family_details_remove_child.step1.informant_relationship.values[3]}}" + ], + "keys": [ + "Sibling", + "Spouse", + "Parent", + "Other" + ], + "openmrs_choice_ids": { + "Sibling": "sibling_id_openmrs", + "Spouse": "spouse_id_openmrs", + "Parent": "parent_id_openmrs", + "Other": "other_id_openmrs" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "informant_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantAddress", + "label": "{{family_details_remove_child.step1.informant_address.label}}", + "hint": "{{family_details_remove_child.step1.informant_address.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "informant_phone", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantPhone", + "label": "{{family_details_remove_child.step1.informant_phone.label}}", + "hint": "{{family_details_remove_child.step1.informant_phone.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_child.step1.informant_phone.v_numeric.err}}" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialFields", + "type": "label", + "text": "{{family_details_remove_child.step1.official_fields.text}}", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialName", + "label": "{{family_details_remove_child.step1.official_name.label}}", + "hint": "{{family_details_remove_child.step1.official_name.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialId", + "label": "{{family_details_remove_child.step1.official_id.label}}", + "hint": "{{family_details_remove_child.step1.official_id.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialPosition", + "label": "{{family_details_remove_child.step1.official_position.label}}", + "hint": "{{family_details_remove_child.step1.official_position.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialAddress", + "label": "{{family_details_remove_child.step1.official_address.label}}", + "hint": "{{family_details_remove_child.step1.official_address.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialNumber", + "label": "{{family_details_remove_child.step1.official_number.label}}", + "hint": "{{family_details_remove_child.step1.official_number.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_child.step1.official_number.v_numeric.err}}" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + } + ] + }, + "properties_file_name": "family_details_remove_child" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/family_details_remove_member.json b/opensrp-chw/src/crvs/assets/json.form/family_details_remove_member.json new file mode 100644 index 0000000000..0c8d089b65 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/family_details_remove_member.json @@ -0,0 +1,970 @@ +{ + "count": "1", + "encounter_type": "Remove Family Member", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{family_details_remove_member.step1.title}}", + "fields": [ + { + "key": "spacer", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "spacer", + "spacer_height": "10sp" + }, + { + "key": "details", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{family_details_remove_member.step1.details.text}}", + "text_size": "25px" + }, + { + "key": "hiddengender", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "edit_type": "name", + "read_only": "true" + }, + { + "key": "remove_reason", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.remove_reason.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.remove_reason.v_required.err}}" + }, + "values": [ + "{{family_details_remove_member.step1.remove_reason.values[0]}}", + "{{family_details_remove_member.step1.remove_reason.values[1]}}", + "{{family_details_remove_member.step1.remove_reason.values[2]}}" + ], + "keys": [ + "Died", + "Moved away", + "Other" + ], + "openmrs_choice_ids": { + "Died": "160034AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Moved away": "160415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "spacer", + "expanded": false, + "read_only": "true", + "hidden": "false" + }, + { + "key": "date_moved", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "164133AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{family_details_remove_member.step1.date_moved.label}}", + "hint": "{{family_details_remove_member.step1.date_moved.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.date_moved.v_required.err}}" + }, + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:dob)", + "err": "{{family_details_remove_member.step1.date_moved.constraints.err}}" + } + ], + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Moved away\")" + } + } + }, + { + "key": "date_died", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{family_details_remove_member.step1.date_died.label}}", + "hint": "{{family_details_remove_member.step1.date_died.hint}}", + "expanded": false, + "min_date": "today-80y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.date_died.v_required.err}}" + }, + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:dob)", + "err": "{{family_details_remove_member.step1.date_died.constraints.err}}" + } + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "age_at_death", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_member.step1.age_at_death.label}}", + "hint": "{{family_details_remove_member.step1.age_at_death.hint}}", + "type": "edit_text", + "read_only": "true", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + }, + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_remove_calculation.yml" + } + } + } + }, + { + "key": "age_at_death_calculation", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_member.step1.age_at_death.label}}", + "hint": "{{family_details_remove_member.step1.age_at_death.hint}}", + "type": "edit_text", + "read_only": "true", + "hidden": "true", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_remove_calculation.yml" + } + } + } + }, + { + "key": "death_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.death_place.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.death_place.v_required.err}}" + }, + "values": [ + "{{family_details_remove_member.step1.death_place.values[0]}}", + "{{family_details_remove_member.step1.death_place.values[1]}}", + "{{family_details_remove_member.step1.death_place.values[2]}}", + "{{family_details_remove_member.step1.death_place.values[3]}}" + ], + "keys": [ + "Health Facility", + "Home", + "Place of work", + "Other" + ], + "openmrs_choice_ids": { + "Health Facility": "health_facility_id_openmrs", + "Home": "home_id_openmrs", + "Place of work": "place_of_work_id_openmrs", + "Other": "other_id_openmrs" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "nationality", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "nationality", + "label": "{{family_details_remove_member.step1.nationality.label}}", + "hint": "{{family_details_remove_member.step1.nationality.hint}}", + "type": "edit_text", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.marital_status.v_required.err}}" + }, + "values": [ + "{{family_details_remove_member.step1.marital_status.values[0]}}", + "{{family_details_remove_member.step1.marital_status.values[1]}}", + "{{family_details_remove_member.step1.marital_status.values[2]}}", + "{{family_details_remove_member.step1.marital_status.values[3]}}", + "{{family_details_remove_member.step1.marital_status.values[4]}}" + ], + "keys": [ + "Co-Habiting", + "Divorced", + "Married", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Co-Habiting": "co_habiting_id_openmrs", + "Divorced": "divorced_id_openmrs", + "Married": "married_id_openmrs", + "Single": "single_id_openmrs", + "Widowed": "widowed_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "mccd_conducted", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "mccdConducted", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.mccd_conducted.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.mccd_conducted.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.mccd_conducted.values[0]}}", + "{{family_details_remove_member.step1.mccd_conducted.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "mccd_yes_id_openmrs", + "No": "mccd_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "physician_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_member.step1.physician_name.label}}", + "hint": "{{family_details_remove_member.step1.physician_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "physician_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_member.step1.physician_position.label}}", + "hint": "{{family_details_remove_member.step1.physician_position.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "death_manner", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_details_remove_member.step1.death_manner.label}}", + "hint": "{{family_details_remove_member.step1.death_manner.hint}}", + "type": "spinner", + "values": [ + "{{family_details_remove_member.step1.death_manner.values[0]}}", + "{{family_details_remove_member.step1.death_manner.values[1]}}", + "{{family_details_remove_member.step1.death_manner.values[2]}}", + "{{family_details_remove_member.step1.death_manner.values[3]}}", + "{{family_details_remove_member.step1.death_manner.values[4]}}", + "{{family_details_remove_member.step1.death_manner.values[5]}}", + "{{family_details_remove_member.step1.death_manner.values[6]}}", + "{{family_details_remove_member.step1.death_manner.values[7]}}", + "{{family_details_remove_member.step1.death_manner.values[8]}}" + ], + "keys": [ + "Disease", + "Accident", + "Intentional self harm", + "Assault", + "Legal Intervention", + "War", + "Could not determine", + "Pending investigation", + "Unknown" + ], + "openmrs_choice_ids": { + "Disease": "disease_id_openmrs", + "Accident": "accident_id_openmrs", + "Intentional self harm": "international_self_harm_id_openmrs", + "Assault": "assault_id_openmrs", + "Legal Intervention": "legal_intervention_id_openmrs", + "War": "war_id_openmrs", + "Could not determine": "could_not_determine_id_openmrs", + "Pending investigation": "pending_investigation_id_openmrs", + "Unknown": "unknown_id_openmrs" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "medically_treated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "medicallyTreated", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.medically_treated.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.medically_treated.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.medically_treated.values[0]}}", + "{{family_details_remove_member.step1.medically_treated.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "medically_treated_yes_id_openmrs", + "No": "medically_treated_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "know_death_cause", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "knowDeathCause", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.know_death_cause.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.know_death_cause.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.know_death_cause.values[0]}}", + "{{family_details_remove_member.step1.know_death_cause.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "cause_of_death_yes_id_openmrs", + "No": "cause_of_death_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "deceased_pregnant", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deceasedPregnant", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.deceased_pregnant.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.deceased_pregnant.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.deceased_pregnant.values[0]}}", + "{{family_details_remove_member.step1.deceased_pregnant.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "deceased_pregnant_yes_id_openmrs", + "No": "deceased_pregnant_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "pregnant_died", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "pregnantDied", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.pregnant_died.hint}}", + "v_required": { + "value": "true", + "err": "{{family_details_remove_member.step1.pregnant_died.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.pregnant_died.values[0]}}", + "{{family_details_remove_member.step1.pregnant_died.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "pregnant_died_yes_id_openmrs", + "No": "pregnant_died_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "still_born_death", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "stillBornDeath", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.still_born_death.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.still_born_death.values[0]}}", + "{{family_details_remove_member.step1.still_born_death.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "still_born_death_yes_id_openmrs", + "No": "still_born_death_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "death_cause", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCause", + "label": "{{family_details_remove_member.step1.death_cause.label}}", + "hint": "{{family_details_remove_member.step1.death_cause.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "death_certificate_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{family_details_remove_member.step1.death_certificate_fields.text}}", + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "received_death_certificate", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "receivedDeathCertificate", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.received_death_certificate.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.received_death_certificate.values[0]}}", + "{{family_details_remove_member.step1.received_death_certificate.values[1]}}" + ], + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "death_certificate_issue_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificateIssueDate", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{family_details_remove_member.step1.death_certificate_issue_date.label}}", + "hint": "{{family_details_remove_member.step1.death_certificate_issue_date.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificateNumber", + "label": "{{family_details_remove_member.step1.death_certificate_number.label}}", + "hint": "{{family_details_remove_member.step1.death_certificate_number.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_member.step1.death_certificate_number.v_numeric.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_notification_done", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathNotificationDone", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.death_notification_done.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_details_remove_member.step1.death_notification_done.values[0]}}", + "{{family_details_remove_member.step1.death_notification_done.values[1]}}" + ], + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"No\")" + } + } + }, + { + "key": "informant_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{family_details_remove_member.step1.informant_fields.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "informant_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantName", + "label": "{{family_details_remove_member.step1.informant_name.label}}", + "hint": "{{family_details_remove_member.step1.informant_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "informant_relationship", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantRelationship", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_details_remove_member.step1.informant_relationship.hint}}", + "values": [ + "{{family_details_remove_member.step1.informant_relationship.values[0]}}", + "{{family_details_remove_member.step1.informant_relationship.values[1]}}", + "{{family_details_remove_member.step1.informant_relationship.values[2]}}", + "{{family_details_remove_member.step1.informant_relationship.values[3]}}", + "{{family_details_remove_member.step1.informant_relationship.values[4]}}" + ], + "keys": [ + "Parent", + "Spouse", + "Sibling", + "Other Relative", + "Other" + ], + "openmrs_choice_ids": { + "Sibling": "sibling_id_openmrs", + "Spouse": "spouse_id_openmrs", + "Parent": "parent_id_openmrs", + "Other Relative": "other_relative_id_openmrs", + "Other": "other_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "informant_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantAddress", + "label": "{{family_details_remove_member.step1.informant_address.label}}", + "hint": "{{family_details_remove_member.step1.informant_address.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "informant_phone", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantPhone", + "label": "{{family_details_remove_member.step1.informant_phone.label}}", + "hint": "{{family_details_remove_member.step1.informant_phone.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_member.step1.informant_phone.v_numeric.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "official_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialFields", + "type": "label", + "text": "{{family_details_remove_member.step1.official_fields.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "official_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialName", + "label": "{{family_details_remove_member.step1.official_name.label}}", + "hint": "{{family_details_remove_member.step1.official_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "official_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialId", + "label": "{{family_details_remove_member.step1.official_id.label}}", + "hint": "{{family_details_remove_member.step1.official_id.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "remove_member_number_acte", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "removeMemberNumberActe", + "label": "Acte No.", + "hint": "{{family_details_remove_member.step1.remove_member_number_acte.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_member.step1.informant_phone.v_numeric.err}}" + }, + "v_max_length": { + "value": "5", + "err": "{{family_details_remove_member.step1.informant_phone.v_max_length.err}}" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "remove_member_number_volume", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "removeMemberNumberVolume", + "label": "Volume No.", + "hint": "{{family_details_remove_member.step1.remove_member_number_volume.hint}}", + "type": "edit_text", + "v_max_length": { + "value": "9", + "err": "{{family_details_remove_member.step1.remove_member_number_volume.v_max_length.error}}" + }, + "v_regex": { + "value": "([0-9]{1,4}\\/[0-9]{1,4})", + "err": "{{family_details_remove_member.step1.remove_member_number_volume.v_regex.error}}" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "remove_member_number_folio", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "removeMemberNumberFolio", + "label": "Folio No.", + "hint": "{{family_details_remove_member.step1.remove_member_number_folio.hint}}", + "type": "edit_text", + "v_max_length": { + "value": "6", + "err": "{{family_details_remove_member.step1.remove_member_number_folio.v_max_length.error}}" + }, + "relevance": { + "step1:remove_reason": { + "type": "string", + "ex": "equalTo(., \"Died\")" + } + } + }, + { + "key": "official_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialPosition", + "label": "{{family_details_remove_member.step1.official_position.label}}", + "hint": "{{family_details_remove_member.step1.official_position.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "official_address", + "openmrs_entity_parent": "", + "openmrs_entity": "officialAddress", + "openmrs_entity_id": "", + "label": "{{family_details_remove_member.step1.official_address.label}}", + "hint": "{{family_details_remove_member.step1.official_address.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + }, + { + "key": "official_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialNumber", + "label": "{{family_details_remove_member.step1.official_number.label}}", + "hint": "{{family_details_remove_member.step1.official_number.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{family_details_remove_member.step1.official_number.v_numeric.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family_details_remove_member_form_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "family_details_remove_member" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/family_member_register.json b/opensrp-chw/src/crvs/assets/json.form/family_member_register.json new file mode 100644 index 0000000000..0279fe43cc --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/family_member_register.json @@ -0,0 +1,500 @@ +{ + "count": "1", + "encounter_type": "Family Member Registration", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{family_member_register.step1.title}}", + "fields": [ + { + "key": "photo", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "choose_image", + "uploadButtonText": "{{family_member_register.step1.photo.uploadButtonText}}" + }, + { + "key": "unique_id", + "openmrs_entity_parent": "", + "openmrs_entity": "person_identifier", + "openmrs_entity_id": "opensrp_id", + "type": "edit_text", + "read_only": "true", + "hint": "{{family_member_register.step1.unique_id.hint}}", + "value": "0", + "scanButtonText": "Scan QR Code", + "v_numeric": { + "value": "true", + "err": "{{family_member_register.step1.unique_id.v_numeric.err}}" + }, + "v_required": { + "value": "true", + "err": "{{family_member_register.step1.unique_id.v_required.err}}" + } + }, + { + "key": "national_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "163084AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "label_info_text": "{{family_member_register.step1.national_id.label_info_text}}", + "label_info_title": "{{family_member_register.step1.national_id.label_info_title}}", + "type": "edit_text", + "hint": "{{family_member_register.step1.national_id.hint}}", + "v_numeric": { + "value": "true", + "err": "{{family_member_register.step1.national_id.v_numeric.err}}" + } + }, + { + "key": "surname", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{family_member_register.step1.surname.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{family_member_register.step1.surname.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_member_register.step1.surname.v_regex.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-relevance.yml" + } + } + } + }, + { + "key": "same_as_fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "openmrs_data_type": "text", + "type": "check_box", + "label": "{{family_member_register.step1.same_as_fam_name.label}}", + "exclusive": [ + "none" + ], + "options": [ + { + "key": "same_as_fam_name", + "text": "{{family_member_register.step1.same_as_fam_name.options.same_as_fam_name.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "hidden": "true" + }, + { + "key": "surname_calculation", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "last_name", + "type": "hidden", + "hint": "{{family_member_register.step1.surname_calculation.hint}}", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-calculation.yml" + } + } + } + }, + { + "key": "first_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "first_name", + "type": "edit_text", + "hint": "{{family_member_register.step1.first_name.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{family_member_register.step1.first_name.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_member_register.step1.first_name.v_regex.err}}" + } + }, + { + "key": "middle_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "middle_name", + "type": "edit_text", + "hint": "{{family_member_register.step1.middle_name.hint}}", + "edit_type": "name", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_member_register.step1.middle_name.v_regex.err}}" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdate", + "type": "date_picker", + "hint": "{{family_member_register.step1.dob.hint}}", + "expanded": false, + "duration": { + "label": "{{family_member_register.step1.dob.duration.label}}" + }, + "min_date": "today-120y", + "max_date": "today-5y", + "v_required": { + "value": "true", + "err": "{{family_member_register.step1.dob.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-relevance.yml" + } + } + } + }, + { + "key": "dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "type": "check_box", + "label": "{{family_member_register.step1.dob_unknown.label}}", + "options": [ + { + "key": "dob_unknown", + "text": "{{family_member_register.step1.dob_unknown.options.dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "age", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{family_member_register.step1.age.hint}}", + "v_numeric_integer": { + "value": "true", + "err": "{{family_member_register.step1.age.v_numeric_integer.err}}" + }, + "v_numeric": { + "value": "true", + "err": "{{family_member_register.step1.age.v_numeric.err}}" + }, + "v_min": { + "value": "15", + "err": "{{family_member_register.step1.age.v_min.err}}" + }, + "v_max": { + "value": "120", + "err": "{{family_member_register.step1.age.v_max.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-relevance.yml" + } + } + }, + "v_required": { + "value": true, + "err": "{{family_member_register.step1.age.v_required.err}}" + } + }, + { + "key": "sex", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "gender", + "type": "spinner", + "hint": "{{family_member_register.step1.sex.hint}}", + "values": [ + "{{family_member_register.step1.sex.values[0]}}", + "{{family_member_register.step1.sex.values[1]}}" + ], + "keys": [ + "Male", + "Female" + ], + "v_required": { + "value": "true", + "err": "{{family_member_register.step1.sex.v_required.err}}" + } + }, + { + "key": "ever_school", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "everSchool", + "type": "spinner", + "expanded": false, + "hint": "{{family_member_register.step1.ever_school.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_member_register.step1.ever_school.values[0]}}", + "{{family_member_register.step1.ever_school.values[1]}}" + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-relevance.yml" + } + } + } + }, + { + "key": "school_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "schoolLevel", + "type": "spinner", + "expanded": false, + "hint": "{{family_member_register.step1.school_level.hint}}", + "values": [ + "{{family_member_register.step1.school_level.values[0]}}", + "{{family_member_register.step1.school_level.values[1]}}", + "{{family_member_register.step1.school_level.values[2]}}", + "{{family_member_register.step1.school_level.values[3]}}", + "{{family_member_register.step1.school_level.values[4]}}", + "{{family_member_register.step1.school_level.values[5]}}", + "{{family_member_register.step1.school_level.values[6]}}" + ], + "keys": [ + "Not currently attending school or any learning program", + "Early childhood programme", + "Primary", + "Lower secondary", + "Upper secondary", + "Alternative learning program", + "Higher" + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-relevance.yml" + } + } + } + }, + { + "key": "primary_caregiver", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "spinner", + "hint": "{{family_member_register.step1.primary_caregiver.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{family_member_register.step1.primary_caregiver.values[0]}}", + "{{family_member_register.step1.primary_caregiver.values[1]}}" + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-member-relevance.yml" + } + } + } + }, + { + "key": "phone_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "edit_text", + "hint": "{{family_member_register.step1.phone_number.hint}}", + "v_numeric": { + "value": "true", + "err": "{{family_member_register.step1.phone_number.v_numeric.err}}" + }, + "v_required": { + "value": false, + "err": "{{family_member_register.step1.phone_number.v_required.err}}" + }, + "relevance": { + "step1:primary_caregiver": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "other_phone_number", + "openmrs_entity_parent": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_entity": "concept", + "openmrs_entity_id": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "edit_text", + "hint": "{{family_member_register.step1.other_phone_number.hint}}", + "v_numeric": { + "value": "true", + "err": "{{family_member_register.step1.other_phone_number.v_numeric.err}}" + }, + "relevance": { + "step1:primary_caregiver": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "highest_edu_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_member_register.step1.highest_edu_level.hint}}", + "values": [ + "{{family_member_register.step1.highest_edu_level.values[0]}}", + "{{family_member_register.step1.highest_edu_level.values[1]}}", + "{{family_member_register.step1.highest_edu_level.values[2]}}", + "{{family_member_register.step1.highest_edu_level.values[3]}}", + "{{family_member_register.step1.highest_edu_level.values[4]}}" + ], + "keys": [ + "None", + "Literacy", + "Primary", + "Secondary", + "University" + ], + "openmrs_choice_ids": { + "None": "1107AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Literacy": "", + "Primary": "1713AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Secondary": "1714AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "University": "159785AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "step1:primary_caregiver": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_member_register.step1.marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{family_member_register.step1.marital_status.v_required.err}}" + }, + "values": [ + "{{family_member_register.step1.marital_status.values[0]}}", + "{{family_member_register.step1.marital_status.values[1]}}", + "{{family_member_register.step1.marital_status.values[2]}}", + "{{family_member_register.step1.marital_status.values[3]}}" + ], + "keys": [ + "Married", + "Co-habiting", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Married": "5555AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Co-habiting": "1060AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Single": "5615AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Widowed": "1059AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "residence", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{family_member_register.step1.residence.label}}", + "hint": "{{family_member_register.step1.residence.hint}}", + "type": "edit_text" + }, + { + "key": "nationality", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "label": "{{family_member_register.step1.nationality.label}}", + "hint": "{{family_member_register.step1.nationality.hint}}", + "type": "edit_text" + } + ] + }, + "properties_file_name": "family_member_register" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/family_register.json b/opensrp-chw/src/crvs/assets/json.form/family_register.json new file mode 100644 index 0000000000..e84ce4851e --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/family_register.json @@ -0,0 +1,618 @@ +{ + "validate_on_submit": true, + "show_errors_on_submit": false, + "count": "2", + "encounter_type": "Family Registration", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{family_register.step1.title}}", + "next": "step2", + "fields": [ + { + "key": "fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "first_name", + "type": "edit_text", + "hint": "{{family_register.step1.fam_name.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{family_register.step1.fam_name.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_register.step1.fam_name.v_regex.err}}" + } + }, + { + "key": "unique_id", + "openmrs_entity_parent": "", + "openmrs_entity": "person_identifier", + "openmrs_entity_id": "opensrp_id", + "hidden": "true", + "type": "barcode", + "barcode_type": "qrcode", + "hint": "{{family_register.step1.unique_id.hint}}", + "scanButtonText": "{{family_register.step1.unique_id.scanButtonText}}", + "v_numeric": { + "value": "true", + "err": "{{family_register.step1.unique_id.v_numeric.err}}" + } + }, + { + "key": "village_town", + "openmrs_entity_parent": "", + "openmrs_entity": "person_address", + "openmrs_entity_id": "cityVillage", + "type": "edit_text", + "hint": "{{family_register.step1.village_town.hint}}", + "v_required": { + "value": "true", + "err": "{{family_register.step1.village_town.v_required.err}}" + } + }, + { + "key": "quarter_clan", + "openmrs_entity_parent": "", + "openmrs_entity": "person_address", + "openmrs_entity_id": "commune", + "type": "edit_text", + "hint": "{{family_register.step1.quarter_clan.hint}}", + "v_required": { + "value": "true", + "err": "{{family_register.step1.quarter_clan.v_required.err}}" + } + }, + { + "key": "street", + "openmrs_entity_parent": "", + "openmrs_entity": "person_address", + "openmrs_entity_id": "street", + "type": "edit_text", + "hint": "{{family_register.step1.street.hint}}" + }, + { + "key": "landmark", + "openmrs_entity_parent": "", + "openmrs_entity": "person_address", + "openmrs_entity_id": "landmark", + "type": "edit_text", + "hint": "{{family_register.step1.landmark.hint}}" + }, + { + "key": "gps", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "163277AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "gps" + }, + { + "key": "spacer", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "spacer", + "spacer_height": "15dp" + }, + { + "key": "fam_source_income", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "fam_source_income", + "openmrs_data_type": "", + "type": "spinner", + "hint": "{{family_register.step1.fam_source_income.hint}}", + "values": [ + "{{family_register.step1.fam_source_income.values[0]}}", + "{{family_register.step1.fam_source_income.values[1]}}", + "{{family_register.step1.fam_source_income.values[2]}}", + "{{family_register.step1.fam_source_income.values[3]}}", + "{{family_register.step1.fam_source_income.values[4]}}", + "{{family_register.step1.fam_source_income.values[5]}}", + "{{family_register.step1.fam_source_income.values[6]}}", + "{{family_register.step1.fam_source_income.values[7]}}", + "{{family_register.step1.fam_source_income.values[8]}}", + "{{family_register.step1.fam_source_income.values[9]}}", + "{{family_register.step1.fam_source_income.values[10]}}" + ], + "keys": [ + "Petty trade", + "Agriculture, hunting and fishing", + "Exploitation of mines and quarries", + "Manufacturing industry", + "Construction", + "Electricity, gas and water", + "Commercial, hotels and restaurants", + "Transport, storage and communications", + "Financial institutions", + "Communication, social and personal services", + "Other" + ], + "openmrs_choice_ids": { + "Petty trade": "1539AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Agriculture, hunting and fishing": "165411AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Exploitation of mines and quarries": "165412AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Manufacturing industry": "165407AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Construction": "165408AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Electricity, gas and water": "165409AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Commercial, hotels and restaurants": "165410AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Transport, storage and communications": "165413AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Financial institutions": "165414AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Communication, social and personal services": "165415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + + { + "key": "fam_add_province", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "fam_add_province", + "openmrs_data_type": "", + "type": "spinner", + "hint": "{{family_register.step1.fam_add_province.hint}}", + "values": [ + "{{family_register.step1.fam_add_province.values[0]}}", + "{{family_register.step1.fam_add_province.values[1]}}", + "{{family_register.step1.fam_add_province.values[2]}}", + "{{family_register.step1.fam_add_province.values[3]}}", + "{{family_register.step1.fam_add_province.values[4]}}", + "{{family_register.step1.fam_add_province.values[5]}}", + "{{family_register.step1.fam_add_province.values[6]}}", + "{{family_register.step1.fam_add_province.values[7]}}", + "{{family_register.step1.fam_add_province.values[8]}}", + "{{family_register.step1.fam_add_province.values[9]}}", + "{{family_register.step1.fam_add_province.values[10]}}", + "{{family_register.step1.fam_add_province.values[11]}}", + "{{family_register.step1.fam_add_province.values[12]}}", + "{{family_register.step1.fam_add_province.values[13]}}", + "{{family_register.step1.fam_add_province.values[14]}}", + "{{family_register.step1.fam_add_province.values[15]}}", + "{{family_register.step1.fam_add_province.values[16]}}", + "{{family_register.step1.fam_add_province.values[17]}}", + "{{family_register.step1.fam_add_province.values[18]}}", + "{{family_register.step1.fam_add_province.values[19]}}", + "{{family_register.step1.fam_add_province.values[20]}}", + "{{family_register.step1.fam_add_province.values[21]}}", + "{{family_register.step1.fam_add_province.values[22]}}", + "{{family_register.step1.fam_add_province.values[23]}}", + "{{family_register.step1.fam_add_province.values[24]}}", + "{{family_register.step1.fam_add_province.values[25]}}" + ], + "keys": [ + "Bas Uele Province", + "Equateur Province", + "Haut Katanga Province", + "Haut Lomami Province", + "Haut Uele Province", + "Ituri Province", + "Kasai Province", + "Kasai Central Province", + "Kasai Oriental Province", + "Kinshasa Province", + "Kongo Central Province", + "Kwango Province", + "Kwilu Province", + "Lomami Province", + "Lualaba Province", + "Maindombe Province", + "Maniema Province", + "Mongala Province", + "Nord Kivu Province", + "Nord Ubangi Province", + "Sankuru Province", + "Sud Kivu Province", + "Sud Ubangi Province", + "Tanganyika Province", + "Tshopo Province", + "Tshuapa Province" + ], + "openmrs_choice_ids": { + "Bas Uele Province": "bas_uele_province", + "Equateur Province": "equateur_province", + "Haut Katanga Province": "haut_katanga_province", + "Haut Lomami Province": "haut_lomami_province", + "Haut Uele Province": "haut_uele_province", + "Ituri Province": "ituri_province", + "Kasai Province": "kasai province", + "Kasai Central Province": "kasai_central_province", + "Kasai Oriental Province": "kasai_oriental_province", + "Kinshasa Province": "kinshasa_province", + "Kongo Central Province": "kongo_central_province", + "Kwango Province": "kwango_province", + "Kwilu Province": "kwilu_province", + "Lomami Province": "lomami_province", + "Lualaba Province": "lualaba_province", + "Maindombe Province": "maindombe_province", + "Maniema Province": "maniema_province", + "Mongala Province": "mongala_province", + "Nord Kivu Province": "nord_kivu_province", + "Nord Ubangi Province": "nord_ubangi_province", + "Sankuru Province": "sankuru_province", + "Sud Kivu Province": "sud_kivu_province", + "Sud Ubangi Province": "sud_ubangi_province", + "Tanganyika Province": "tanganyika_province", + "Tshopo Province": "tshopo_province", + "Tshuapa Province": "tshuapa_province" + } + } + ] + }, + "step2": { + "title": "{{family_register.step2.title}}", + "fields": [ + { + "key": "photo", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "choose_image", + "uploadButtonText": "{{family_register.step2.photo.uploadButtonText}}" + }, + { + "key": "unique_id", + "openmrs_entity_parent": "", + "openmrs_entity": "person_identifier", + "openmrs_entity_id": "opensrp_id", + "type": "edit_text", + "hint": "{{family_register.step2.unique_id.hint}}", + "value": "0", + "read_only": "true", + "v_numeric": { + "value": "true", + "err": "{{family_register.step2.unique_id.v_numeric.err}}" + }, + "v_required": { + "value": "true", + "err": "{{family_register.step2.unique_id.v_required.err}}" + } + }, + { + "key": "national_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "163084AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "label_info_text": "{{family_register.step2.national_id.label_info_text}}", + "label_info_title": "{{family_register.step2.national_id.label_info_title}}", + "type": "edit_text", + "hint": "{{family_register.step2.national_id.hint}}", + "v_numeric": { + "value": "true", + "err": "{{family_register.step2.national_id.v_numeric.err}}" + } + }, + { + "key": "surname", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "edit_text", + "hint": "{{family_register.step2.surname.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{family_register.step2.surname.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_register.step2.surname.v_regex.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-register-relevance.yml" + } + } + } + }, + { + "key": "same_as_fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "check_box", + "label": "{{family_register.step2.same_as_fam_name.label}}", + "options": [ + { + "key": "same_as_fam_name", + "text": "{{family_register.step2.same_as_fam_name.options.same_as_fam_name.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "surname_calculation", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "last_name", + "type": "edit_text", + "hidden": true, + "hint": "{{family_register.step2.surname_calculation.hint}}", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-register-calculation.yml" + } + } + } + }, + { + "key": "first_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "first_name", + "type": "edit_text", + "hint": "{{family_register.step2.first_name.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{family_register.step2.first_name.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_register.step2.first_name.v_regex.err}}" + } + }, + { + "key": "middle_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "middle_name", + "type": "edit_text", + "hint": "{{family_register.step2.middle_name.hint}}", + "edit_type": "name", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{family_register.step2.middle_name.v_regex.err}}" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdate", + "type": "date_picker", + "hint": "{{family_register.step2.dob.hint}}", + "expanded": false, + "duration": { + "label": "{{family_register.step2.dob.duration.label}}" + }, + "min_date": "today-120y", + "max_date": "today-15y", + "v_required": { + "value": "true", + "err": "{{family_register.step2.dob.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-register-relevance.yml" + } + } + } + }, + { + "key": "dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "type": "check_box", + "label": "{{family_register.step2.dob_unknown.label}}", + "options": [ + { + "key": "dob_unknown", + "text": "{{family_register.step2.dob_unknown.options.dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "age", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age_entered", + "type": "edit_text", + "hint": "{{family_register.step2.age.hint}}", + "v_numeric_integer": { + "value": "true", + "err": "{{family_register.step2.age.v_numeric_integer.err}}" + }, + "v_numeric": { + "value": "true", + "err": "{{family_register.step2.age.v_numeric.err}}" + }, + "v_min": { + "value": "15", + "err": "{{family_register.step2.age.v_min.err}}" + }, + "v_max": { + "value": "120", + "err": "{{family_register.step2.age.v_max.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "family-register-relevance.yml" + } + } + }, + "v_required": { + "value": true, + "err": "{{family_register.step2.age.v_required.err}}" + } + }, + { + "key": "sex", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "gender", + "type": "spinner", + "hint": "{{family_register.step2.sex.hint}}", + "values": [ + "{{family_register.step2.sex.values[0]}}", + "{{family_register.step2.sex.values[1]}}" + ], + "keys": [ + "Male", + "Female" + ], + "v_required": { + "value": "true", + "err": "{{family_register.step2.sex.v_required.err}}" + } + }, + { + "key": "phone_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "edit_text", + "hint": "{{family_register.step2.phone_number.hint}}", + "v_numeric": { + "value": "true", + "err": "{{family_register.step2.phone_number.v_numeric.err}}" + }, + "v_required": { + "value": false, + "err": "{{family_register.step2.phone_number.v_required.err}}" + } + }, + { + "key": "other_phone_number", + "openmrs_entity_parent": "159635AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_entity": "concept", + "openmrs_entity_id": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "edit_text", + "hint": "{{family_register.step2.other_phone_number.hint}}", + "v_numeric": { + "value": "true", + "err": "{{family_register.step2.other_phone_number.v_numeric.err}}" + } + }, + { + "key": "highest_edu_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_register.step2.highest_edu_level.hint}}", + "values": [ + "{{family_register.step2.highest_edu_level.values[0]}}", + "{{family_register.step2.highest_edu_level.values[1]}}", + "{{family_register.step2.highest_edu_level.values[2]}}", + "{{family_register.step2.highest_edu_level.values[3]}}", + "{{family_register.step2.highest_edu_level.values[4]}}" + ], + "keys": [ + "None", + "Literacy", + "Primary", + "Secondary", + "University" + ], + "openmrs_choice_ids": { + "None": "1107AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Literacy": "", + "Primary": "1713AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Secondary": "1714AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "University": "159785AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{family_register.step2.marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{family_register.step2.marital_status.v_required.err}}" + }, + "values": [ + "{{family_register.step2.marital_status.values[0]}}", + "{{family_register.step2.marital_status.values[1]}}", + "{{family_register.step2.marital_status.values[2]}}", + "{{family_register.step2.marital_status.values[3]}}" + ], + "keys": [ + "Married", + "Co-habiting", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Married": "5555AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Co-habiting": "1060AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Single": "5615AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Widowed": "1059AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "nationality", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "160417AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "label": "{{family_register.step2.nationality.label}}", + "hint": "{{family_register.step2.nationality.hint}}", + "type": "edit_text" + } + ] + }, + "properties_file_name": "family_register" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/out_of_area_child_enrollment.json b/opensrp-chw/src/crvs/assets/json.form/out_of_area_child_enrollment.json new file mode 100644 index 0000000000..1b6f8e56fc --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/out_of_area_child_enrollment.json @@ -0,0 +1,949 @@ +{ + "count": "1", + "encounter_type": "Out Of Area Child Registration", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{out_of_area_child_enrollment.step1.title}}", + "fields": [ + { + "key": "photo", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "choose_image", + "uploadButtonText": "{{out_of_area_child_enrollment.step1.photo.uploadButtonText}}" + }, + { + "key": "unique_id", + "openmrs_entity_parent": "", + "openmrs_entity": "person_identifier", + "openmrs_entity_id": "opensrp_id", + "hidden": "false", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.unique_id.hint}}", + "read_only": "true", + "value": "0", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.unique_id.v_numeric.err}}" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.unique_id.v_required.err}}" + } + }, + { + "key": "surname", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "surname", + "openmrs_data_type": "text", + "look_up": "true", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.surname.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.surname.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{out_of_area_child_enrollment.step1.surname.v_regex.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "same_as_fam_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "openmrs_data_type": "text", + "hidden": "true", + "type": "check_box", + "label": "{{out_of_area_child_enrollment.step1.same_as_fam_name.label}}", + "exclusive": [ + "none" + ], + "options": [ + { + "key": "same_as_fam_name", + "text": "{{out_of_area_child_enrollment.step1.same_as_fam_name.options.same_as_fam_name.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "first_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "first_name", + "openmrs_data_type": "text", + "type": "edit_text", + "expanded": false, + "hint": "{{out_of_area_child_enrollment.step1.first_name.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.first_name.v_required.err}}" + }, + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{out_of_area_child_enrollment.step1.first_name.v_regex.err}}" + } + }, + { + "key": "middle_name", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "middle_name", + "openmrs_data_type": "text", + "type": "edit_text", + "expanded": false, + "hint": "{{out_of_area_child_enrollment.step1.middle_name.hint}}", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{out_of_area_child_enrollment.step1.middle_name.v_regex.err}}" + } + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdate", + "type": "date_picker", + "hint": "{{out_of_area_child_enrollment.step1.dob.hint}}", + "expanded": false, + "duration": { + "label": "{{out_of_area_child_enrollment.step1.dob.duration.label}}" + }, + "min_date": "today-5y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.dob.v_required.err}}" + } + }, + { + "key": "dob_estimated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "check_box", + "label": "{{out_of_area_child_enrollment.step1.dob_estimated.label}}", + "options": [ + { + "key": "dob_estimated", + "text": "{{out_of_area_child_enrollment.step1.dob_estimated.options.dob_estimated.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "age", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "spacer", + "read_only": "true", + "hint": "{{out_of_area_child_enrollment.step1.age.hint}}" + }, + { + "key": "gender", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "gender", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.gender.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.gender.values[0]}}", + "{{out_of_area_child_enrollment.step1.gender.values[1]}}" + ], + "keys": [ + "Masculin", + "Feminin" + ], + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.gender.v_required.err}}" + } + }, + { + "key": "birth_place_type", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthPlaceType", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.birth_place_type.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.birth_place_type.values[0]}}", + "{{out_of_area_child_enrollment.step1.birth_place_type.values[1]}}", + "{{out_of_area_child_enrollment.step1.birth_place_type.values[2]}}" + ], + "keys": [ + "Home", + "Health facility", + "Other" + ], + "openmrs_choice_ids": { + "Home": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Health facility": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Hospital": "1601AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "5622AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.birth_place_type.v_required.err}}" + } + }, + { + "key": "birth_place_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthPlaceName", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.birth_place_name.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.birth_place_name.v_required.err}}" + } + }, + { + "key": "no_children", + "type": "repeating_group", + "reference_edit_text_hint": "{{out_of_area_child_enrollment.step1.no_children.reference_edit_text_hint}}", + "repeating_group_label": "Détails sur le bébé #", + "repeating_group_max": "10", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "hint": "{{out_of_area_child_enrollment.step1.no_children.hint}}", + "openmrs_entity_id": "", + "v_numeric_integer": { + "value": "true" + }, + "v_required": { + "value": true, + "err": "{{out_of_area_child_enrollment.step1.no_children.v_required.err}}" + } + }, + { + "key": "del_attendant", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "delAttendant", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.del_attendant.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.del_attendant.values[0]}}", + "{{out_of_area_child_enrollment.step1.del_attendant.values[1]}}", + "{{out_of_area_child_enrollment.step1.del_attendant.values[2]}}", + "{{out_of_area_child_enrollment.step1.del_attendant.values[3]}}" + ], + "keys": [ + "Doctor", + "Nurse", + "Midwife", + "Other" + ], + "openmrs_choice_ids": { + "Doctor": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Nurse": "openmrs_choice_ids_birth_nurse", + "Midwife": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "openmrs_choice_ids_birth_other" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.del_attendant.v_required.err}}" + } + }, + { + "key": "del_mode", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "delMode", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.del_mode.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.del_mode.values[0]}}", + "{{out_of_area_child_enrollment.step1.del_mode.values[1]}}", + "{{out_of_area_child_enrollment.step1.del_mode.values[2]}}", + "{{out_of_area_child_enrollment.step1.del_mode.values[3]}}", + "{{out_of_area_child_enrollment.step1.del_mode.values[4]}}" + ], + "keys": [ + "Césarienne", + "Forceps", + "Accouchement normal", + "Ventouse", + "Inconnu" + ], + "openmrs_choice_ids": { + "C-Section": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Forceps": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Normal delivery": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Vacuum": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Unknown": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.del_mode.v_required.err}}" + } + }, + { + "key": "type_of_pregnancy", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "typeOfPregnancy", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.type_of_pregnancy.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.type_of_pregnancy.values[0]}}", + "{{out_of_area_child_enrollment.step1.type_of_pregnancy.values[1]}}", + "{{out_of_area_child_enrollment.step1.type_of_pregnancy.values[2]}}", + "{{out_of_area_child_enrollment.step1.type_of_pregnancy.values[3]}}", + "{{out_of_area_child_enrollment.step1.type_of_pregnancy.values[4]}}" + ], + "openmrs_choice_ids": { + "Singleton": "1536AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Twin": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Triplet": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Other": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Unknown": "1588AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.type_of_pregnancy.v_required.err}}" + } + }, + { + "key": "birth_weight", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{out_of_area_child_enrollment.step1.birth_weight.label}}", + "hint": "{{out_of_area_child_enrollment.step1.birth_weight.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.birth_weight.v_numeric.err}}" + }, + "v_min": { + "value": "500", + "err": "{{out_of_area_child_enrollment.step1.birth_weight.v_min.err}}" + }, + "v_max": { + "value": "6000", + "err": "{{out_of_area_child_enrollment.step1.birth_weight.v_max.err}}" + } + }, + { + "key": "mother_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherName", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.mother_name.hint}}", + "look_up": "true", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.mother_name.v_required.err}}" + } + }, + { + "key": "mother_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherId", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.mother_id.hint}}", + "edit_type": "name" + }, + { + "key": "mother_dob_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherBirthDate", + "type": "date_picker", + "hint": "{{out_of_area_child_enrollment.step1.mother_dob_entered.hint}}", + "expanded": false, + "duration": { + "label": "{{out_of_area_child_enrollment.step1.mother_dob_entered.duration.label}}" + }, + "min_date": "today-120y", + "max_date": "today-10y", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.mother_dob_entered.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "mother_dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "label": "{{out_of_area_child_enrollment.step1.mother_dob_unknown.label}}", + "type": "check_box", + "options": [ + { + "key": "dob_unknown", + "text": "{{out_of_area_child_enrollment.step1.mother_dob_unknown.options.dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "mother_age_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.mother_age_entered.hint}}", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.mother_age_entered.v_numeric.err}}" + }, + "v_min": { + "value": "5", + "err": "{{out_of_area_child_enrollment.step1.mother_age_entered.v_min.err}}" + }, + "v_max": { + "value": "120", + "err": "{{out_of_area_child_enrollment.step1.mother_age_entered.v_max.err}}" + }, + "v_required": { + "value": true, + "err": "{{out_of_area_child_enrollment.step1.mother_age_entered.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "mother_marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.mother_marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.mother_marital_status.v_required.err}}" + }, + "values": [ + "{{out_of_area_child_enrollment.step1.mother_marital_status.values[0]}}", + "{{out_of_area_child_enrollment.step1.mother_marital_status.values[1]}}", + "{{out_of_area_child_enrollment.step1.mother_marital_status.values[2]}}", + "{{out_of_area_child_enrollment.step1.mother_marital_status.values[3]}}" + ], + "keys": [ + "Married", + "Co-habiting", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Married": "5555AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Co-habiting": "1060AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Single": "5615AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Widowed": "1059AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "mother_highest_edu_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.mother_highest_edu_level.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.mother_highest_edu_level.values[0]}}", + "{{out_of_area_child_enrollment.step1.mother_highest_edu_level.values[1]}}", + "{{out_of_area_child_enrollment.step1.mother_highest_edu_level.values[2]}}", + "{{out_of_area_child_enrollment.step1.mother_highest_edu_level.values[3]}}", + "{{out_of_area_child_enrollment.step1.mother_highest_edu_level.values[4]}}" + ], + "keys": [ + "None", + "Literacy", + "Primary", + "Secondary", + "University" + ], + "openmrs_choice_ids": { + "None": "1107AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Literacy": "", + "Primary": "1713AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Secondary": "1714AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "University": "159785AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "mother_usual_residence", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherUsualResidence", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.mother_usual_residence.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.mother_usual_residence.v_required.err}}" + } + }, + { + "key": "mother_birth_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "motherBirthPlace", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.mother_birth_place.hint}}", + "edit_type": "name", + "v_required": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.mother_birth_place.v_required.err}}" + } + }, + { + "key": "father_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherName", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.father_name.hint}}", + "edit_type": "name" + }, + { + "key": "father_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherId", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.father_id.hint}}", + "edit_type": "name" + }, + { + "key": "father_dob_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherBirthDate", + "type": "date_picker", + "hint": "{{out_of_area_child_enrollment.step1.father_dob_entered.hint}}", + "expanded": false, + "duration": { + "label": "{{out_of_area_child_enrollment.step1.father_dob_entered.duration.label}}" + }, + "min_date": "today-120y", + "max_date": "today-10y", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "father_dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "type": "check_box", + "options": [ + { + "key": "dob_unknown", + "text": "{{out_of_area_child_enrollment.step1.father_dob_unknown.options.dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "father_age_entered", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.father_age_entered.hint}}", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.father_age_entered.v_numeric.err}}" + }, + "v_min": { + "value": "5", + "err": "{{out_of_area_child_enrollment.step1.father_age_entered.v_min.err}}" + }, + "v_max": { + "value": "120", + "err": "{{out_of_area_child_enrollment.step1.father_age_entered.v_max.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "father_marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1054AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.father_marital_status.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.father_marital_status.values[0]}}", + "{{out_of_area_child_enrollment.step1.father_marital_status.values[1]}}", + "{{out_of_area_child_enrollment.step1.father_marital_status.values[2]}}", + "{{out_of_area_child_enrollment.step1.father_marital_status.values[3]}}" + ], + "keys": [ + "Married", + "Co-habiting", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Married": "5555AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Co-habiting": "1060AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Single": "5615AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Widowed": "1059AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "father_highest_edu_level", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1712AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.father_highest_edu_level.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.father_highest_edu_level.values[0]}}", + "{{out_of_area_child_enrollment.step1.father_highest_edu_level.values[1]}}", + "{{out_of_area_child_enrollment.step1.father_highest_edu_level.values[2]}}", + "{{out_of_area_child_enrollment.step1.father_highest_edu_level.values[3]}}", + "{{out_of_area_child_enrollment.step1.father_highest_edu_level.values[4]}}" + ], + "keys": [ + "None", + "Literacy", + "Primary", + "Secondary", + "University" + ], + "openmrs_choice_ids": { + "None": "1107AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Literacy": "", + "Primary": "1713AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "Secondary": "1714AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "University": "159785AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "father_birth_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "fatherBirthPlace", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.father_birth_place.hint}}", + "look_up": "true", + "edit_type": "name" + }, + { + "key": "birth_cert", + "openmrs_entity_parent": "Concept - Birth certificate obtained", + "openmrs_entity": "concept", + "openmrs_entity_id": "165406AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.birth_cert.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.birth_cert.values[0]}}", + "{{out_of_area_child_enrollment.step1.birth_cert.values[1]}}" + ], + "keys": [ + "Yes", + "No" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + } + }, + { + "key": "birth_cert_issue_date", + "openmrs_entity_parent": "Concept - Date of issue of birth certificate", + "openmrs_entity": "concept", + "openmrs_entity_id": "164129AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "type": "date_picker", + "hint": "{{out_of_area_child_enrollment.step1.birth_cert_issue_date.hint}}", + "expanded": false, + "min_date": "today-5y", + "max_date": "today", + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:dob)", + "err": "{{out_of_area_child_enrollment.step1.birth_cert_issue_date..constraints.err}}" + } + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "birth_cert_num", + "openmrs_entity_parent": "Concept - Birth certificate number", + "openmrs_entity": "concept", + "openmrs_entity_id": "162052AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{out_of_area_child_enrollment.step1.birth_cert_num.hint}}", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_child_enrollment.step1.birth_cert_num.v_numeric.err}}" + }, + "v_regex": { + "value": "([0-9]{1,15})|\\s*", + "err": "{{out_of_area_child_enrollment.step1.birth_cert_num.v_regex.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "birth_registration", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegistration", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.birth_registration.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.birth_registration.values[0]}}", + "{{out_of_area_child_enrollment.step1.birth_registration.values[1]}}" + ], + "keys": [ + "Yes", + "No" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "birth_registration_note", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegistrationNote", + "type": "label", + "text": "{{out_of_area_child_enrollment.step1.birth_registration_note.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "birth_notification", + "openmrs_entity_parent": "Concept - Birth notification", + "openmrs_entity": "concept", + "openmrs_entity_id": "165405AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.birth_notification.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.birth_notification.values[0]}}", + "{{out_of_area_child_enrollment.step1.birth_notification.values[1]}}" + ], + "keys": [ + "Yes", + "No" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "system_birth_notification", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "systemBirthNotification", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.system_birth_notification.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.system_birth_notification.values[0]}}", + "{{out_of_area_child_enrollment.step1.system_birth_notification.values[1]}}" + ], + "keys": [ + "Yes", + "No" + ], + "openmrs_choice_ids": { + "Yes": "1065AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "1066AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "birth_reg_type", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "birthRegType", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_child_enrollment.step1.birth_reg_type.hint}}", + "values": [ + "{{out_of_area_child_enrollment.step1.birth_reg_type.values[0]}}", + "{{out_of_area_child_enrollment.step1.birth_reg_type.values[1]}}", + "{{out_of_area_child_enrollment.step1.birth_reg_type.values[2]}}", + "{{out_of_area_child_enrollment.step1.birth_reg_type.values[3]}}", + "{{out_of_area_child_enrollment.step1.birth_reg_type.values[4]}}" + ], + "keys": [ + "Both Parents", + "Self", + "Informant Only", + "Mother Only", + "Father Only" + ], + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + }, + { + "key": "informant_reason", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantReason", + "openmrs_data_type": "text", + "type": "edit_text", + "hint": "{{birth_certification_changed.step1.informant_reason.hint}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_enrollment_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "out_of_area_child_enrollment" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/json.form/out_of_area_death_form.json b/opensrp-chw/src/crvs/assets/json.form/out_of_area_death_form.json new file mode 100644 index 0000000000..a01520689b --- /dev/null +++ b/opensrp-chw/src/crvs/assets/json.form/out_of_area_death_form.json @@ -0,0 +1,1004 @@ +{ + "count": "1", + "encounter_type": "Out Of Area Death Registration", + "entity_id": "", + "relational_id": "", + "metadata": { + "start": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "start", + "openmrs_entity_id": "163137AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "end": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "end", + "openmrs_entity_id": "163138AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "today": { + "openmrs_entity_parent": "", + "openmrs_entity": "encounter", + "openmrs_entity_id": "encounter_date" + }, + "deviceid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "deviceid", + "openmrs_entity_id": "163149AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "subscriberid": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "subscriberid", + "openmrs_entity_id": "163150AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "simserial": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "simserial", + "openmrs_entity_id": "163151AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "phonenumber": { + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_data_type": "phonenumber", + "openmrs_entity_id": "163152AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "encounter_location": "", + "look_up": { + "entity_id": "", + "value": "" + } + }, + "step1": { + "title": "{{out_of_area_death_form.step1.title}}", + "fields": [ + { + "key": "unique_id", + "openmrs_entity_parent": "", + "openmrs_entity": "person_identifier", + "openmrs_entity_id": "opensrp_id", + "hidden": "false", + "type": "edit_text", + "hint": "{{out_of_area_death_form.step1.unique_id.hint}}", + "read_only": "true", + "value": "0", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_death_form.step1.unique_id.v_numeric.err}}" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.unique_id.v_required.err}}" + } + }, + { + "key": "name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "name", + "type": "edit_text", + "hint": "{{out_of_area_death_form.step1.name.hint}}", + "edit_type": "Nom", + "v_regex": { + "value": "[A-Za-z\\u00C0-\\u017F\\s\\u00C0-\\u017F\\.\\-]*", + "err": "{{out_of_area_death_form.step1.name.v_regex.err}}" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.name.v_required.err}}" + } + }, + { + "key": "national_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "National_ID", + "type": "edit_text", + "hint": "{{out_of_area_death_form.step1.national_id.hint}}", + "edit_type": "name" + }, + { + "key": "dob", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdate", + "openmrs_data_type": "text", + "type": "date_picker", + "hint": "{{out_of_area_death_form.step1.dob.hint}}", + "expanded": false, + "min_date": "today-120y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.dob.v_required.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "dob_unknown", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "birthdateApprox", + "hidden": "false", + "type": "check_box", + "label": "{{out_of_area_death_form.step1.dob_unknown.label}}", + "options": [ + { + "key": "dob_unknown", + "text": "{{out_of_area_death_form.step1.dob_unknown.options.dob_unknown.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "age_calculated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "ageCalculated", + "type": "hidden", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "age", + "openmrs_entity_parent": "", + "openmrs_entity": "person_attribute", + "openmrs_entity_id": "age", + "type": "edit_text", + "hint": "{{out_of_area_death_form.step1.age.hint}}", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_death_form.step1.age.v_numeric.err}}" + }, + "v_min": { + "value": "1", + "err": "{{out_of_area_death_form.step1.age.v_min.err}}" + }, + "v_max": { + "value": "120", + "err": "{{out_of_area_death_form.step1.age.v_max.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + }, + "v_required": { + "value": true, + "err": "{{out_of_area_death_form.step1.age.v_required.err}}" + } + }, + { + "key": "dob_calculated", + "openmrs_entity_parent": "", + "openmrs_entity": "", + "openmrs_entity_id": "", + "type": "hidden", + "value": "", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "dob_estimated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "check_box", + "label": "{{out_of_area_death_form.step1.dob_estimated.label}}", + "options": [ + { + "key": "dob_estimated", + "text": "{{out_of_area_death_form.step1.dob_estimated.options.dob_estimated.text}}", + "text_size": "18px", + "value": "false" + } + ] + }, + { + "key": "sex", + "openmrs_entity_parent": "", + "openmrs_entity": "person", + "openmrs_entity_id": "gender", + "type": "native_radio", + "label": "{{out_of_area_death_form.step1.sex.label}}", + "options": [ + { + "key": "Male", + "text": "{{out_of_area_death_form.step1.sex.options.Male.text}}" + }, + { + "key": "Female", + "text": "{{out_of_area_death_form.step1.sex.options.Female.text}}" + } + ], + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.sex.v_required.err}}" + } + }, + { + "key": "date_died", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "1543AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{out_of_area_death_form.step1.date_died.label}}", + "hint": "{{out_of_area_death_form.step1.date_died.hint}}", + "expanded": false, + "min_date": "today-80y", + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.date_died.v_required.err}}" + }, + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:dob)", + "err": "{{out_of_area_death_form.step1.date_died.constraints.err}}" + } + ] + }, + { + "key": "age_at_death", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "label": "{{out_of_area_death_form.step1.age_at_death.label}}", + "hint": "{{out_of_area_death_form.step1.age_at_death.hint}}", + "type": "edit_text", + "read_only": "true", + "calculation": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_child_remove_calculation.yml" + } + } + } + }, + { + "key": "death_place", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathPlace", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.death_place.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.death_place.v_required.err}}" + }, + "values": [ + "{{out_of_area_death_form.step1.death_place.values[0]}}", + "{{out_of_area_death_form.step1.death_place.values[1]}}", + "{{out_of_area_death_form.step1.death_place.values[2]}}", + "{{out_of_area_death_form.step1.death_place.values[3]}}" + ], + "keys": [ + "Health Facility", + "Home", + "Place of work", + "Other" + ], + "openmrs_choice_ids": { + "Home": "home_id_openmrs", + "Place of work": "place_of_work_id_openmrs", + "Health Facility": "health_facility_id_openmrs", + "Other": "other_id_openmrs" + } + }, + { + "key": "nationality", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "nationality", + "label": "{{out_of_area_death_form.step1.nationality.label}}", + "hint": "{{out_of_area_death_form.step1.nationality.hint}}", + "type": "edit_text" + }, + { + "key": "marital_status", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "maritalStatus", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.marital_status.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.marital_status.v_required.err}}" + }, + "values": [ + "{{out_of_area_death_form.step1.marital_status.values[0]}}", + "{{out_of_area_death_form.step1.marital_status.values[1]}}", + "{{out_of_area_death_form.step1.marital_status.values[2]}}", + "{{out_of_area_death_form.step1.marital_status.values[3]}}", + "{{out_of_area_death_form.step1.marital_status.values[4]}}" + ], + "keys": [ + "Co-Habiting", + "Divorced", + "Married", + "Single", + "Widowed" + ], + "openmrs_choice_ids": { + "Co-Habiting": "co_habiting_id_openmrs", + "Divorced": "divorced_id_openmrs", + "Married": "married_id_openmrs", + "Single": "single_id_openmrs", + "Widowed": "widowed_id_openmrs" + } + }, + { + "key": "mccd_conducted", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "mccdConducted", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.mccd_conducted.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.mccd_conducted.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.mccd_conducted.values[0]}}", + "{{out_of_area_death_form.step1.mccd_conducted.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "mccd_yes_id_openmrs", + "No": "mccd_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "physician_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "physicianName", + "label": "{{out_of_area_death_form.step1.physician_name.label}}", + "hint": "{{out_of_area_death_form.step1.physician_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "physician_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "physicianPosition", + "label": "{{out_of_area_death_form.step1.physician_position.label}}", + "hint": "{{out_of_area_death_form.step1.physician_position.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "death_manner", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathManner", + "openmrs_data_type": "select one", + "label": "{{out_of_area_death_form.step1.death_manner.label}}", + "hint": "{{out_of_area_death_form.step1.death_manner.hint}}", + "type": "spinner", + "values": [ + "{{out_of_area_death_form.step1.death_manner.values[0]}}", + "{{out_of_area_death_form.step1.death_manner.values[1]}}", + "{{out_of_area_death_form.step1.death_manner.values[2]}}", + "{{out_of_area_death_form.step1.death_manner.values[3]}}", + "{{out_of_area_death_form.step1.death_manner.values[4]}}", + "{{out_of_area_death_form.step1.death_manner.values[5]}}", + "{{out_of_area_death_form.step1.death_manner.values[6]}}", + "{{out_of_area_death_form.step1.death_manner.values[7]}}", + "{{out_of_area_death_form.step1.death_manner.values[8]}}" + ], + "keys": [ + "Disease", + "Accident", + "Intentional self harm", + "Assault", + "Legal Intervention", + "War", + "Could not determine", + "Pending investigation", + "Unknown" + ], + "openmrs_choice_ids": { + "Disease": "disease_id_openmrs", + "Accident": "accident_id_openmrs", + "Intentional self harm": "international_self_harm_id_openmrs", + "Assault": "assault_id_openmrs", + "Legal Intervention": "legal_intervention_id_openmrs", + "War": "war_id_openmrs", + "Could not determine": "could_not_determine_id_openmrs", + "Pending investigation": "pending_investigation_id_openmrs", + "Unknown": "unknown_id_openmrs" + } + }, + { + "key": "medically_treated", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "medicallyTreated", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.medically_treated.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.medically_treated.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.medically_treated.values[0]}}", + "{{out_of_area_death_form.step1.medically_treated.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "medically_treated_yes_id_openmrs", + "No": "medically_treated_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "know_death_cause", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "knowDeathCause", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.know_death_cause.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.know_death_cause.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.know_death_cause.values[0]}}", + "{{out_of_area_death_form.step1.know_death_cause.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "cause_of_death_yes_id_openmrs", + "No": "cause_of_death_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "deceased_pregnant", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deceasedPregnant", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.deceased_pregnant.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.deceased_pregnant.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.deceased_pregnant.values[0]}}", + "{{out_of_area_death_form.step1.deceased_pregnant.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "deceased_pregnant_yes_id_openmrs", + "No": "deceased_pregnant_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "pregnant_died", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "pregnantDied", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.pregnant_died.hint}}", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.pregnant_died.v_required.err}}" + }, + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.pregnant_died.values[0]}}", + "{{out_of_area_death_form.step1.pregnant_died.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "pregnant_died_yes_id_openmrs", + "No": "pregnant_died_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "still_born_death", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "stillBornDeath", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.still_born_death.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.still_born_death.values[0]}}", + "{{out_of_area_death_form.step1.still_born_death.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "still_born_yes_id_openmrs", + "No": "still_born_no_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "death_cause", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCause", + "label": "{{out_of_area_death_form.step1.death_cause.label}}", + "hint": "{{out_of_area_death_form.step1.death_cause.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "received_death_certificate", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "receivedDeathCertificate", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.received_death_certificate.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.received_death_certificate.values[0]}}", + "{{out_of_area_death_form.step1.received_death_certificate.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "160034AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "160415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.received_death_certificate.v_required.err}}" + } + }, + { + "key": "death_certificate_issue_date", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificateIssueDate", + "openmrs_data_type": "text", + "type": "date_picker", + "label": "{{out_of_area_death_form.step1.death_certificate_issue_date.label}}", + "hint": "{{out_of_area_death_form.step1.death_certificate_issue_date.hint}}", + "expanded": false, + "max_date": "today", + "v_required": { + "value": "true", + "err": "{{out_of_area_death_form.step1.death_certificate_issue_date.v_required.err}}" + }, + "constraints": [ + { + "type": "date", + "ex": "greaterThanEqualTo(., step1:date_died)", + "err": "{{out_of_area_death_form.step1.death_certificate_issue_date.constraints.err}}" + } + ], + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumber", + "text": "{{out_of_area_death_form.step1.death_certificate_number.hint}}", + "type": "label", + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number_acte", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumberActe", + "label": "Acte No.", + "hint": "{{out_of_area_death_form.step1.death_certificate_number_acte.hint}}", + "type": "edit_text", + "v_max_length": { + "value": "5", + "err": "{{out_of_area_death_form.step1.death_certificate_number_acte.v_max_length.error}}" + }, + "v_numeric": { + "value": "true", + "err": "{{out_of_area_death_form.step1.death_certificate_number.v_numeric.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number_volume", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumberVolume", + "label": "Volume No.", + "hint": "{{out_of_area_death_form.step1.death_certificate_number_volume.hint}}", + "type": "edit_text", + "v_regex": { + "value": "([0-9]{1,4}\\/[0-9]{1,4})", + "err": "{{out_of_area_death_form.step1.death_certificate_number_volume.v_regex.error}}" + }, + "v_max_length": { + "value": "9", + "err": "{{out_of_area_death_form.step1.death_certificate_number_volume.v_max_length.error}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_certificate_number_folio", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathCertificationNumberFolio", + "label": "Folio No.", + "hint": "{{out_of_area_death_form.step1.death_certificate_number_folio.hint}}", + "type": "edit_text", + "v_max_length": { + "value": "6", + "err": "{{out_of_area_death_form.step1.death_certificate_number_folio.v_max_length.error}}" + }, + "v_numeric": { + "value": "true", + "err": "{{out_of_area_death_form.step1.death_certificate_number.v_numeric.err}}" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"Yes\")" + } + } + }, + { + "key": "death_notification_done", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "deathNotificationDone", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.death_notification_done.hint}}", + "keys": [ + "Yes", + "No" + ], + "values": [ + "{{out_of_area_death_form.step1.death_notification_done.values[0]}}", + "{{out_of_area_death_form.step1.death_notification_done.values[1]}}" + ], + "openmrs_choice_ids": { + "Yes": "160034AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "No": "160415AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + }, + "relevance": { + "step1:received_death_certificate": { + "type": "string", + "ex": "equalTo(., \"No\")" + } + } + }, + { + "key": "informant_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{out_of_area_death_form.step1.informant_fields.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "informant_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantName", + "label": "{{out_of_area_death_form.step1.informant_name.label}}", + "hint": "{{out_of_area_death_form.step1.informant_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "informant_relationship", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantRelationship", + "openmrs_data_type": "select one", + "type": "spinner", + "hint": "{{out_of_area_death_form.step1.informant_relationship.hint}}", + "values": [ + "{{out_of_area_death_form.step1.informant_relationship.values[0]}}", + "{{out_of_area_death_form.step1.informant_relationship.values[1]}}", + "{{out_of_area_death_form.step1.informant_relationship.values[2]}}", + "{{out_of_area_death_form.step1.informant_relationship.values[3]}}", + "{{out_of_area_death_form.step1.informant_relationship.values[4]}}" + + ], + "keys": [ + "Parent", + "Spouse", + "Sibling", + "Other Relative", + "Other" + ], + "openmrs_choice_ids": { + "Sibling": "sibling_id_openmrs", + "Spouse": "spouse_id_openmrs", + "Parent": "parent_id_openmrs", + "Other": "other_id_openmrs" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "informant_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantAddress", + "label": "{{out_of_area_death_form.step1.informant_address.label}}", + "hint": "{{out_of_area_death_form.step1.informant_address.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "informant_phone", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "informantPhone", + "label": "{{out_of_area_death_form.step1.informant_phone.label}}", + "hint": "{{out_of_area_death_form.step1.informant_phone.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_death_form.step1.informant_phone.v_numeric.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "official_fields", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "", + "type": "label", + "text": "{{out_of_area_death_form.step1.official_fields.text}}", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "official_name", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialName", + "label": "{{out_of_area_death_form.step1.official_name.label}}", + "hint": "{{out_of_area_death_form.step1.official_name.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "official_id", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialId", + "label": "{{out_of_area_death_form.step1.official_id.label}}", + "hint": "{{out_of_area_death_form.step1.official_id.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "official_position", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialPosition", + "label": "{{out_of_area_death_form.step1.official_position.label}}", + "hint": "{{out_of_area_death_form.step1.official_position.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "official_address", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialAddress", + "label": "{{out_of_area_death_form.step1.official_address.label}}", + "hint": "{{out_of_area_death_form.step1.official_address.hint}}", + "type": "edit_text", + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + }, + { + "key": "official_number", + "openmrs_entity_parent": "", + "openmrs_entity": "concept", + "openmrs_entity_id": "officialNumber", + "label": "{{out_of_area_death_form.step1.official_number.label}}", + "hint": "{{out_of_area_death_form.step1.official_number.hint}}", + "type": "edit_text", + "v_numeric": { + "value": "true", + "err": "{{out_of_area_death_form.step1.official_number.v_numeric.err}}" + }, + "relevance": { + "rules-engine": { + "ex-rules": { + "rules-file": "out_of_area_death_form_relevance.yml" + } + } + } + } + ] + }, + "properties_file_name": "out_of_area_death_form" +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/anc-home-visit-rules.yml b/opensrp-chw/src/crvs/assets/rule/anc-home-visit-rules.yml new file mode 100644 index 0000000000..82f39f0c80 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc-home-visit-rules.yml @@ -0,0 +1,44 @@ +--- +name: expiry +description: expire lmp greter than 1 yr +priority: 1 +condition: "ancVisitAlertRule.isExpiry()" +actions: + - "ancVisitAlertRule.buttonStatus = 'EXPIRY'" +--- +name: visit_not_done +description: press visit not done in this month +priority: 1 +condition: "ancVisitAlertRule.isVisitNotDone()" +actions: + - "ancVisitAlertRule.buttonStatus = 'NOT_VISIT_THIS_MONTH'" +--- +name: visit_twenty_four +description: visit within twenty four hours +priority: 2 +condition: "ancVisitAlertRule.isVisitWithinTwentyFour()" +actions: + - "ancVisitAlertRule.buttonStatus = 'LESS_TWENTY_FOUR'" +--- +name: visit_this_month +description: visit grether than 24 hours but within this month +priority: 3 +condition: "ancVisitAlertRule.isVisitWithinThisMonth()" +actions: + - "ancVisitAlertRule.buttonStatus = 'VISIT_THIS_MONTH'" +--- +name: overdue +description: previous month not visited +priority: 2 +condition: "ancVisitAlertRule.isOverdueWithinMonth(1)" +actions: + - "ancVisitAlertRule.buttonStatus = 'OVERDUE'" +--- +name: due +description: due first day of month and same month +priority: 3 +condition: "ancVisitAlertRule.isDueWithinMonth()" +actions: + - "ancVisitAlertRule.buttonStatus = 'DUE'" + + diff --git a/opensrp-chw/src/crvs/assets/rule/anc_hv_danger_signs_relevance.yml b/opensrp-chw/src/crvs/assets/rule/anc_hv_danger_signs_relevance.yml new file mode 100644 index 0000000000..efab9915eb --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc_hv_danger_signs_relevance.yml @@ -0,0 +1,6 @@ +name: step1_danger_signs_present_toaster +description: danger_signs_present_toaster +priority: 1 +condition: "!step1_danger_signs_present.equals('None') && !step1_danger_signs_present.equals('Any danger signs present?')" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/anc_member_registration_calculation.yml b/opensrp-chw/src/crvs/assets/rule/anc_member_registration_calculation.yml new file mode 100644 index 0000000000..f5fccbcbe9 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc_member_registration_calculation.yml @@ -0,0 +1,54 @@ +--- +name: step1_gest_age +description: Gestational age calculated +priority: 1 +condition: "true" +actions: + - "calculation = (helper.getDifferenceDays(step1_edd != '' ? helper.subtractDuration(step1_edd,'280d') : step1_last_menstrual_period)-helper.getDifferenceDays(helper.getDateToday())) /7" + +--- +name: step1_gest_age_note +description: Gestational age calculated +priority: 1 +condition: "true" +actions: + - "calculation = step1_gest_age + ' ' + step1_weeks" + +--- +name: step1_edd +description: Edd calculated +priority: 1 +condition: "true" +actions: + - "calculation = step1_last_menstrual_period != '' ? helper.addDuration(step1_last_menstrual_period,'280d') : ''" + +--- +name: step1_gravida +description: gravida calculated +priority: 1 +condition: "true" +actions: + - "calculation = step1_no_prev_preg + 1" + +--- +name: step1_last_menstrual_period +description: last_menstrual_period calculated +priority: 1 +condition: "true" +actions: + - "calculation = helper.subtractDuration(step1_edd,'280d')" + +--- +name: step1_edd_note +description: Edd calculated +priority: 1 +condition: "true" +actions: + - "calculation = step1_edd != '' ? step1_edd : helper.addDuration(step1_last_menstrual_period,'280d')" +--- +name: step1_total_foetal_deaths +description: Total Foetal Deaths +priority: 1 +condition: "true" +actions: + - "calculation = step1_gravida - step1_no_surv_children" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/anc_member_registration_relevance.yml b/opensrp-chw/src/crvs/assets/rule/anc_member_registration_relevance.yml new file mode 100644 index 0000000000..237b9b641e --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc_member_registration_relevance.yml @@ -0,0 +1,35 @@ +--- +name: step1_name_person_assist +description: assist person relevance +priority: 1 +condition: "step1_person_assist == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_phone_person_assist +description: assist person phone number relevance +priority: 1 +condition: "step1_person_assist == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_last_menstrual_period +description: lmp_entered relevance +priority: 1 +condition: "!step1_last_menstrual_period_unknown.contains('lmp_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_edd +description: edd relevance +priority: 1 +condition: "step1_last_menstrual_period_unknown.contains('lmp_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_no_surv_children +description: no of surviving children +priority: 1 +condition: "step1_no_prev_preg > 0 && step1_no_prev_preg != ''" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_calculation.yml b/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_calculation.yml new file mode 100644 index 0000000000..e2868a040b --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_calculation.yml @@ -0,0 +1,32 @@ +--- +name: step1_gest_age_delivery +description: Gestational age calculated +priority: 1 +condition: "true" +actions: + - "calculation = (helper.getDifferenceDays(step1_last_menstrual_period)-helper.getDifferenceDays(helper.getDateToday())) /7" + +--- +name: step1_surname_calculation +description: surname calculation +priority: 1 +condition: "true" +actions: + - "calculation = step1_same_as_fam_name.contains('same_as_fam_name')? step1_fam_name : step1_surname" + +--- +name: step1_dob +description: calculate dob +priority: 1 +condition: "true" +actions: + - "calculation = step1_delivery_date" + +--- +name: step1_unique_id +description: calculate unique_id +priority: 1 +condition: "true" +actions: + - "calculation = step1_temp_unique_id" + diff --git a/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_constraints.yml b/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_constraints.yml new file mode 100644 index 0000000000..c4b2575e2f --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_constraints.yml @@ -0,0 +1,7 @@ +--- +name: step1_bcg_date +description: Number Selectors +priority: 1 +condition: "step1_delivery_date!=''" +actions: + - "constraint = ['min_date' : helper.minDate(step1_delivery_date)]" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_relevance.yml b/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_relevance.yml new file mode 100644 index 0000000000..9645f69638 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/anc_pregnancy_outcome_relevance.yml @@ -0,0 +1,104 @@ +--- +name: step1_miscarriage_date +description: miscarriage_date relevance +priority: 1 +condition: "step1_preg_outcome == 'Miscarriage'" +actions: + - "isRelevant = true" + +--- +name: step1_delivery_date +description: miscarriage_date relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" + +--- +name: step1_delivery_place +description: delivery_place relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" + +--- +name: step1_birth_place_name +description: birth_place_name relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" + +--- +name: step1_baby_label +description: baby_label relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth'" +actions: + - "isRelevant = true" + +--- +name: step1_no_children_no +description: no_children_no relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth'" +actions: + - "isRelevant = true" + +--- +name: step1_surname +description: surname relevance +priority: 1 +condition: "!step1_same_as_fam_name.contains('same_as_fam_name')" +actions: + - "isRelevant = true" +--- +name: step1_stillbirth_classification +description: stillbirth classification relevance +priority: 1 +condition: "step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" +--- +name: step1_del_attendant +description: del attendant relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" +--- +name: step1_del_mode +description: del_mode relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" +--- +name: step1_type_of_pregnancy +description: type of pregnancy relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" +--- +name: step1_birth_weight +description: birth weight relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" +--- +name: step1_link_to_father +description: link to father relevance +priority: 1 +condition: "step1_preg_outcome == 'Live birth' || step1_preg_outcome == 'Stillbirth'" +actions: + - "isRelevant = true" +--- +name: step1_del_attendant_other +description: Del Attendant Other +priority: 1 +condition: "step1_del_attendant == 'Other'" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/birth_certification_intro_relevance_rule.yml b/opensrp-chw/src/crvs/assets/rule/birth_certification_intro_relevance_rule.yml new file mode 100644 index 0000000000..ecd6558adf --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/birth_certification_intro_relevance_rule.yml @@ -0,0 +1,63 @@ +--- +name: step1_birthinstroductions +description: birth notification and instruct +priority: 1 +condition: "step1_birth_notification == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_issue_date +description: birth certification issue date +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num_acte +description: birth certification acte +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num_volume +description: birth certification volume +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num_folio +description: birth certification folio +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_notification +description: birth notification +priority: 1 +condition: "step1_birth_cert == 'No' && step1_birth_registration == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num +description: birth certificate number +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_registration +description: birth registration +priority: 1 +condition: "step1_birth_cert == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_birth_registration +description: birth registration +priority: 1 +condition: "step1_birth_cert == 'No'" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/birth_certification_relevance.yml b/opensrp-chw/src/crvs/assets/rule/birth_certification_relevance.yml new file mode 100644 index 0000000000..ffa16f4fe3 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/birth_certification_relevance.yml @@ -0,0 +1,77 @@ +--- +name: step1_birth_cert_issue_date +description: birth certification issue date +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num +description: birth certification number +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num_folio +description: birth certification Floio +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num_volume +description: birth certification Volume +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num_acte +description: birth certification Acte +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_notification +description: birth notification done +priority: 1 +condition: "step1_birth_cert == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_birthinstroductions +description: birth notification and instruct +priority: 1 +condition: "step1_birth_notification == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_caregiverinstroductions +description: Note with instructions to the caregiver. +priority: 1 +condition: "step1_birth_notification == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_system_birth_notification +description: System Birth Notification +priority: 1 +condition: "step1_birth_notification == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_informant_reason +description: Informant Reason +priority: 1 +condition: "step1_birth_reg_type == 'Informant Only'" +actions: + - "isRelevant = true" +--- +name: step1_birth_reg_type +description: Informant +priority: 1 +condition: "step1_birth_cert == 'Yes' || step1_system_birth_notification == 'Yes' || step1_birth_notification == 'Yes'" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/child_remove_calculation.yml b/opensrp-chw/src/crvs/assets/rule/child_remove_calculation.yml new file mode 100644 index 0000000000..ddd2a77d26 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/child_remove_calculation.yml @@ -0,0 +1,20 @@ +--- +name: step1_age_at_death +description: Calculated age_at_death +priority: 1 +condition: "step1_date_died != '' && step1_dob != ''" +actions: + - "calculation = helper.getDuration(step1_date_died , step1_dob)" +--- +name: step1_age_at_death_calculation +description: Calculated age_at_death +priority: 1 +condition: "step1_date_died != '' && step1_dob != ''" +actions: + - "def getDate(dateFormat) { + import java.text.DateFormat; + import java.text.ParseException; + import java.text.SimpleDateFormat; + return new SimpleDateFormat('dd-MM-yyyy').format(new SimpleDateFormat('dd MMM yyyy').parse(dateFormat)); + }" + - "calculation = helper.getDifferenceDays(getDate(step1_date_died),step1_dob) / 365.25" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/contact-rules.yml b/opensrp-chw/src/crvs/assets/rule/contact-rules.yml new file mode 100644 index 0000000000..91d586b847 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/contact-rules.yml @@ -0,0 +1,70 @@ +--- +name: after_eight +description: after eight weeks +priority: 2 +condition: "contactRule.currentVisit < 20" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 8" + - "contactRule.set.add(contactRule.currentVisit)" +--- +name: after_six +description: after six weeks +priority: 2 +condition: "contactRule.currentVisit >= 20 && contactRule.currentVisit < 26" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 6" + - "contactRule.set.add(contactRule.currentVisit)" +--- +name: after_four +description: after four weeks +priority: 2 +condition: "contactRule.currentVisit >= 26 && contactRule.currentVisit < 34" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 4" + - "contactRule.set.add(contactRule.currentVisit)" +--- +name: after_two +description: after two weeks +priority: 2 +condition: "contactRule.currentVisit >= 34 && contactRule.currentVisit < 40" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 2" + - "contactRule.set.add(contactRule.currentVisit)" +--- +name: contains_40 +description: contains 40 weeks +priority: 3 +condition: "!contactRule.set.contains(40) && contactRule.initialVisit != 41" +actions: + - "contactRule.set.add(40)" +--- +name: contains_41 +description: contains 41 weeks +priority: 3 +condition: "!contactRule.set.contains(41)" +actions: + - "contactRule.set.add(41)" +--- +name: first_visit_22_23 +description: first visit is 22 or 23 weeks +priority: 1 +condition: "contactRule.isFirst && (contactRule.initialVisit == 22 || contactRule.initialVisit == 23) && contactRule.currentVisit >= 30 && contactRule.currentVisit < 40" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 2" + - "contactRule.set.add(contactRule.currentVisit)" +--- +name: first_visit_28_29 +description: first visit is 28 or 29 weeks +priority: 1 +condition: "contactRule.isFirst && (contactRule.initialVisit == 28 || contactRule.initialVisit == 29) && contactRule.currentVisit >= 32 && contactRule.currentVisit < 40" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 2" + - "contactRule.set.add(contactRule.currentVisit)" +--- +name: first_visit_30 +description: first visit is 30 weeks +priority: 1 +condition: "contactRule.isFirst && (contactRule.initialVisit >= 30) && contactRule.currentVisit < 40" +actions: + - "contactRule.currentVisit = contactRule.currentVisit + 2" + - "contactRule.set.add(contactRule.currentVisit)" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/death_certification_relevance.yml b/opensrp-chw/src/crvs/assets/rule/death_certification_relevance.yml new file mode 100644 index 0000000000..e2bdbcf10a --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/death_certification_relevance.yml @@ -0,0 +1,77 @@ +--- +name: step1_informant_fields +description: informant_fields +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_name +description: informant_name +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_relationship +description: informant_relationship +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_address +description: informant_address +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_phone +description: informant_phone +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_fields +description: official_fields +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_name +description: official_name +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_ID +description: official_ID +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_position +description: official_position +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_address +description: official_address +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_number +description: official_number +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/early_child_development.yml b/opensrp-chw/src/crvs/assets/rule/early_child_development.yml new file mode 100644 index 0000000000..32bb40f387 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/early_child_development.yml @@ -0,0 +1,7 @@ +--- +name: step1_early_learning +description: early learning will be visible Child is at least 3 years old +priority: 1 +condition: "step1_date_pass >= 1095.75" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family-child-calculation.yml b/opensrp-chw/src/crvs/assets/rule/family-child-calculation.yml new file mode 100644 index 0000000000..5cdbcc9385 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family-child-calculation.yml @@ -0,0 +1,7 @@ +--- +name: step1_surname_calculation +description: surname calculation +priority: 1 +condition: "true" +actions: + - "calculation = step1_same_as_fam_name.contains('same_as_fam_name')? step1_fam_name : step1_surname" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family-child-relevance.yml b/opensrp-chw/src/crvs/assets/rule/family-child-relevance.yml new file mode 100644 index 0000000000..ac1e75763b --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family-child-relevance.yml @@ -0,0 +1,56 @@ +--- +name: step1_surname +description: surname relevance +priority: 1 +condition: "!step1_same_as_fam_name.contains('same_as_fam_name')" +actions: + - "isRelevant = true" +--- +name: step1_dob +description: dob relevance +priority: 1 +condition: "!step1_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_age +description: age relevance +priority: 1 +condition: "step1_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_early_bf_1hr +description: early_bf_1hr below six month +priority: 1 +condition: "helper.formatDate(step1_dob,'m') < 6" +actions: + - "isRelevant = true" +--- +name: step1_mother_dob_entered +description: mother_dob_entered relevance +priority: 1 +condition: "!step1_mother_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_mother_age_entered +description: mother_age_entered relevance +priority: 1 +condition: "step1_mother_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_father_dob_entered +description: father_dob_entered relevance +priority: 1 +condition: "!step1_father_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_father_age_entered +description: father_age_entered relevance +priority: 1 +condition: "step1_father_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family-member-calculation.yml b/opensrp-chw/src/crvs/assets/rule/family-member-calculation.yml new file mode 100644 index 0000000000..5cdbcc9385 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family-member-calculation.yml @@ -0,0 +1,7 @@ +--- +name: step1_surname_calculation +description: surname calculation +priority: 1 +condition: "true" +actions: + - "calculation = step1_same_as_fam_name.contains('same_as_fam_name')? step1_fam_name : step1_surname" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family-member-relevance.yml b/opensrp-chw/src/crvs/assets/rule/family-member-relevance.yml new file mode 100644 index 0000000000..9ea789fc71 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family-member-relevance.yml @@ -0,0 +1,63 @@ +--- +name: step1_surname +description: surname relevance +priority: 1 +condition: "!step1_same_as_fam_name.contains('same_as_fam_name')" +actions: + - "isRelevant = true" +--- +name: step1_dob +description: dob relevance +priority: 1 +condition: "!step1_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_age +description: age relevance +priority: 1 +condition: "step1_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_phone_number +description: phone number relevance +priority: 1 +condition: "step1_primary_caregiver == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_other_phone_number +description: other phone number relevance +priority: 1 +condition: "step1_primary_caregiver == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_highest_edu_level +description: highest edulevel relevance +priority: 1 +condition: "step1_primary_caregiver == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_ever_school +description: ever attended school relevance +priority: 1 +condition: "(step1_dob != '' && helper.formatDate(step1_dob,'y') <= 18) || (step1_age != '' && step1_age <= 18)" +actions: + - "isRelevant = true" +--- +name: step1_school_level +description: level of school relevance +priority: 1 +condition: "step1_ever_school == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_primary_caregiver +description: member is between 5yrs and 120 yrs +priority: 1 +condition: " (step1_dob != '' && helper.formatDate(step1_dob,'y') >= 15 && helper.formatDate(step1_dob,'y') <= 120) || (step1_age != '' && step1_age >= 15 && step1_age <= 120)" +actions: + - "isRelevant = true" diff --git a/opensrp-chw/src/crvs/assets/rule/family-register-calculation.yml b/opensrp-chw/src/crvs/assets/rule/family-register-calculation.yml new file mode 100644 index 0000000000..c200630685 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family-register-calculation.yml @@ -0,0 +1,7 @@ +--- +name: step2_surname_calculation +description: surname calculation +priority: 1 +condition: "true" +actions: + - "calculation = step2_same_as_fam_name.contains('same_as_fam_name')? step1_fam_name : step2_surname" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family-register-relevance.yml b/opensrp-chw/src/crvs/assets/rule/family-register-relevance.yml new file mode 100644 index 0000000000..90b4d25988 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family-register-relevance.yml @@ -0,0 +1,21 @@ +--- +name: step2_surname +description: surname relevance +priority: 1 +condition: "!step2_same_as_fam_name.contains('same_as_fam_name')" +actions: + - "isRelevant = true" +--- +name: step2_dob +description: dob relevance +priority: 1 +condition: "!step2_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step2_age +description: age relevance +priority: 1 +condition: "step2_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family_details_remove_child_form_relevance.yml b/opensrp-chw/src/crvs/assets/rule/family_details_remove_child_form_relevance.yml new file mode 100644 index 0000000000..9dcd15d539 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family_details_remove_child_form_relevance.yml @@ -0,0 +1,85 @@ +--- +name: step1_mccd_conducted +description: mccd_conducted +priority: 1 +condition: "step1_death_place.equals('Health Facility')" +actions: + - "isRelevant = true" +--- +name: step1_medically_treated +description: medically_treated +priority: 1 +condition: "!step1_death_place.equals('Health Facility') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_know_death_cause +description: know_death_cause +priority: 1 +condition: "!step1_death_place.equals('Health Facility') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- + +name: step1_physician_name +description: physician_name +priority: 1 +condition: "step1_death_place.equals('Health Facility') && step1_mccd_conducted.equals('Yes') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_physician_position +description: physician_position +priority: 1 +condition: "step1_death_place.equals('Health Facility') && step1_mccd_conducted.equals('Yes') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_death_cause +description: death_cause +priority: 1 +condition: "step1_know_death_cause.equals('Yes') || step1_mccd_conducted.equals('Yes') && step1_remove_reason.equals('Died') " +actions: + - "isRelevant = true" +--- +name: step1_pregnant_died +description: pregnant_died +priority: 1 +condition: "step1_deceased_pregnant.equals('Yes') && step1_hiddengender.equals('Female')" +actions: + - "isRelevant = true" +--- +name: step1_deceased_pregnant +description: deceased_pregnant +priority: 1 +condition: "step1_hiddengender=='Female' && step1_remove_reason.equals('Died') && ((step1_dob != '' && (helper.formatDate(step1_dob,'y') > 14 && helper.formatDate(step1_dob,'y') < 50)) || (step1_age != '' && (step1_age > 14 && step1_age < 50)))" +actions: + - "isRelevant = true" +--- +name: step1_still_born_death +description: still_born_death +priority: 1 +condition: "step1_remove_reason.equals('Died') && (step1_dob != '' && (helper.formatDate(step1_dob,'d') >= 0 && helper.formatDate(step1_dob,'d') < 27))" +actions: + - "isRelevant = true" +--- +name: step1_date_died +description: date_died +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_age_at_death +description: age_at_death +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_marital_status +description: age_at_death +priority: 1 +condition: "step1_remove_reason.equals('Died') && step1_age_at_death_calculation > 14" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family_details_remove_member_form_relevance.yml b/opensrp-chw/src/crvs/assets/rule/family_details_remove_member_form_relevance.yml new file mode 100644 index 0000000000..2f23f0c0d1 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family_details_remove_member_form_relevance.yml @@ -0,0 +1,162 @@ +--- +name: step1_mccd_conducted +description: mccd_conducted +priority: 1 +condition: "step1_death_place.equals('Health Facility')" +actions: + - "isRelevant = true" +--- +name: step1_medically_treated +description: medically_treated +priority: 1 +condition: "!step1_death_place.equals('Health Facility') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_know_death_cause +description: know_death_cause +priority: 1 +condition: "!step1_death_place.equals('Health Facility') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- + +name: step1_physician_name +description: physician_name +priority: 1 +condition: "step1_death_place.equals('Health Facility') && step1_mccd_conducted.equals('Yes') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_physician_position +description: physician_position +priority: 1 +condition: "step1_death_place.equals('Health Facility') && step1_mccd_conducted.equals('Yes') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_death_cause +description: death_cause +priority: 1 +condition: "step1_know_death_cause.equals('Yes') || step1_mccd_conducted.equals('Yes') && step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_pregnant_died +description: pregnant_died +priority: 1 +condition: "step1_deceased_pregnant.equals('Yes') && step1_hiddengender.equals('Female')" +actions: + - "isRelevant = true" +--- +name: step1_deceased_pregnant +description: deceased_pregnant +priority: 1 +condition: "step1_hiddengender=='Female' && step1_remove_reason.equals('Died') && ((step1_dob != '' && (helper.formatDate(step1_dob,'y') > 14 && helper.formatDate(step1_dob,'y') < 50)) || (step1_age != '' && (step1_age > 14 && step1_age < 50)))" +actions: + - "isRelevant = true" +--- +name: step1_still_born_death +description: still_born_death +priority: 1 +condition: "step1_remove_reason.equals('Died') && (step1_dob != '' && (helper.formatDate(step1_dob,'d') >= 0 && helper.formatDate(step1_dob,'d') < 27))" +actions: + - "isRelevant = true" +--- +name: step1_date_died +description: date_died +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_age_at_death +description: age_at_death +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_marital_status +description: age_at_death +priority: 1 +condition: "step1_remove_reason.equals('Died') && step1_age_at_death_calculation > 14" +actions: + - "isRelevant = true" +--- +name: step1_informant_fields +description: informant_fields +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_name +description: informant_name +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_relationship +description: informant_relationship +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_address +description: informant_address +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_phone +description: informant_phone +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_fields +description: official_fields +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_name +description: official_name +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_ID +description: official_ID +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_position +description: official_position +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_address +description: official_address +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_number +description: official_number +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family_kit_relevance.yml b/opensrp-chw/src/crvs/assets/rule/family_kit_relevance.yml new file mode 100644 index 0000000000..49aed462b5 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family_kit_relevance.yml @@ -0,0 +1,7 @@ +--- +name: step1_family_kit_used +description: birth notification and instruct +priority: 1 +condition: "step1_family_kit_received == 'Simple Kit (ORS/ZINC and Paracetamol)' || step1_family_kit_received == 'Simple Kit (ORS/ZINC and Paracetamol) with micronutrients'" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/family_remove_calculation.yml b/opensrp-chw/src/crvs/assets/rule/family_remove_calculation.yml new file mode 100644 index 0000000000..ddd2a77d26 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/family_remove_calculation.yml @@ -0,0 +1,20 @@ +--- +name: step1_age_at_death +description: Calculated age_at_death +priority: 1 +condition: "step1_date_died != '' && step1_dob != ''" +actions: + - "calculation = helper.getDuration(step1_date_died , step1_dob)" +--- +name: step1_age_at_death_calculation +description: Calculated age_at_death +priority: 1 +condition: "step1_date_died != '' && step1_dob != ''" +actions: + - "def getDate(dateFormat) { + import java.text.DateFormat; + import java.text.ParseException; + import java.text.SimpleDateFormat; + return new SimpleDateFormat('dd-MM-yyyy').format(new SimpleDateFormat('dd MMM yyyy').parse(dateFormat)); + }" + - "calculation = helper.getDifferenceDays(getDate(step1_date_died),step1_dob) / 365.25" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/home-visit-rules.yml b/opensrp-chw/src/crvs/assets/rule/home-visit-rules.yml new file mode 100644 index 0000000000..bb3de2ce68 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/home-visit-rules.yml @@ -0,0 +1,44 @@ +--- +name: expiry +description: expire dob greter then 5 yr +priority: 1 +condition: "homeAlertRule.isExpiry(5)" +actions: + - "homeAlertRule.buttonStatus = 'EXPIRY'" +--- +name: visit_not_done +description: press visit not done in this month +priority: 1 +condition: "homeAlertRule.isVisitNotDone()" +actions: + - "homeAlertRule.buttonStatus = 'NOT_VISIT_THIS_MONTH'" +--- +name: visit_twenty_four +description: visit within twenty four hours +priority: 2 +condition: "homeAlertRule.isVisitWithinTwentyFour()" +actions: + - "homeAlertRule.buttonStatus = 'LESS_TWENTY_FOUR'" +--- +name: visit_this_month +description: visit grether than 24 hours but within this month +priority: 3 +condition: "homeAlertRule.isVisitWithinThisMonth()" +actions: + - "homeAlertRule.buttonStatus = 'VISIT_THIS_MONTH'" +--- +name: overdue +description: previous month not visited +priority: 2 +condition: "homeAlertRule.isOverdueWithinMonth(1)" +actions: + - "homeAlertRule.buttonStatus = 'OVERDUE'" +--- +name: due +description: due first day of month and same month +priority: 3 +condition: "homeAlertRule.isDueWithinMonth()" +actions: + - "homeAlertRule.buttonStatus = 'DUE'" + + diff --git a/opensrp-chw/src/crvs/assets/rule/immunization-expire-rules.yml b/opensrp-chw/src/crvs/assets/rule/immunization-expire-rules.yml new file mode 100644 index 0000000000..ee016f5afc --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/immunization-expire-rules.yml @@ -0,0 +1,22 @@ +--- +name: expired_opv0 +description: expired opv0 at 28 day +priority: 1 +condition: "immunizationExpireRule.isOpv0Expired(28)" +actions: + - "immunizationExpireRule.isExpired = true" +--- +name: expired_mcv2 +description: expired mcv2 at 24 month +priority: 2 +condition: "immunizationExpireRule.isMcv2Expired(24)" +actions: + - "immunizationExpireRule.isExpired = true" +--- +name: expired_all_other_vaccine +description: expired all other vaccine after 24 month +priority: 3 +condition: "immunizationExpireRule.isAllVaccineExpired(24)" +actions: + - "immunizationExpireRule.isExpired = true" + diff --git a/opensrp-chw/src/crvs/assets/rule/out_of_area_child_enrollment_relevance.yml b/opensrp-chw/src/crvs/assets/rule/out_of_area_child_enrollment_relevance.yml new file mode 100644 index 0000000000..6fdd366944 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/out_of_area_child_enrollment_relevance.yml @@ -0,0 +1,91 @@ +--- +name: step1_surname +description: surname relevance +priority: 1 +condition: "!step1_same_as_fam_name.contains('same_as_fam_name')" +actions: + - "isRelevant = true" +--- +name: step1_mother_dob_entered +description: mother_dob_entered relevance +priority: 1 +condition: "!step1_mother_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_mother_age_entered +description: mother_age_entered relevance +priority: 1 +condition: "step1_mother_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_father_dob_entered +description: father_dob_entered relevance +priority: 1 +condition: "!step1_father_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_father_age_entered +description: father_age_entered relevance +priority: 1 +condition: "step1_father_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_issue_date +description: birth certification issue date +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_cert_num +description: birth certification number +priority: 1 +condition: "step1_birth_cert == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_registration +description: birth_registration +priority: 1 +condition: "step1_birth_cert == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_birth_registration_note +description: Birth Notification Note +priority: 1 +condition: "step1_birth_registration == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_birth_notification +description: Birth Notification +priority: 1 +condition: "step1_birth_registration == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_system_birth_notification +description: System Birth Notification +priority: 1 +condition: "step1_birth_notification == 'No'" +actions: + - "isRelevant = true" +--- +name: step1_birth_reg_type +description: Birth Registration Type +priority: 1 +condition: "step1_birth_cert == 'Yes' || step1_system_birth_notification == 'Yes' || step1_birth_notification == 'Yes'" +actions: + - "isRelevant = true" +--- +name: step1_informant_reason +description: Informant Reason +priority: 1 +condition: "step1_birth_reg_type == 'Informant Only'" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/out_of_area_child_remove_calculation.yml b/opensrp-chw/src/crvs/assets/rule/out_of_area_child_remove_calculation.yml new file mode 100644 index 0000000000..cf4c3ba2e1 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/out_of_area_child_remove_calculation.yml @@ -0,0 +1,13 @@ +--- +name: step1_age_at_death +description: Calculated age_at_death +priority: 1 +condition: "step1_date_died != '' && step1_dob != ''" +actions: + - "def getDate(dateFormat) { + import java.text.DateFormat; + import java.text.ParseException; + import java.text.SimpleDateFormat; + return new SimpleDateFormat('dd-MM-yyyy').format(new SimpleDateFormat('dd MMM yyyy').parse(dateFormat)); + }" + - "calculation = helper.getDuration(getDate(step1_date_died), getDate(step1_dob))" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/out_of_area_death_form_relevance.yml b/opensrp-chw/src/crvs/assets/rule/out_of_area_death_form_relevance.yml new file mode 100644 index 0000000000..d1c3ffac24 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/out_of_area_death_form_relevance.yml @@ -0,0 +1,203 @@ +--- +name: step1_dob +description: dob relevance +priority: 1 +condition: "!step1_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_age_calculated +description: Age calculated +priority: 1 +condition: "true" +actions: +- "calculation = (!step1_dob_unknown.isEmpty() && step1_dob_unknown.contains('dob_unknown')) ? step1_age : helper.getDifferenceDays(step1_dob) / 365.25" +--- +name: step1_age +description: age relevance +priority: 1 +condition: "step1_dob_unknown.contains('dob_unknown')" +actions: + - "isRelevant = true" +--- +name: step1_dob_calculated +description: Calculated D.O.B +priority: 1 +condition: "step1_age_entered != ''" +actions: + - 'calculation = helper.getDOBFromAge(step1_age)' +--- +name: step1_dob +description: Final calculated DOB +priority: 1 +condition: "true" +actions: + - 'calculation = (step1_dob == "" ? step1_dob_calculated : step1_dob)' +--- +name: step1_date_died +description: date_died +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_age_at_death +description: age_at_death +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_age_at_death +description: Calculated age_at_death +priority: 1 +condition: "step1_date_died != '' && step1_dob != ''" +actions: + - "calculation = helper.getDuration(step1_date_died , step1_dob)" +--- +name: step1_death_manner +description: death_manner +priority: 1 +condition: "step1_remove_reason.equals('Died')" +actions: + - "isRelevant = true" +--- +name: step1_medically_treated +description: medically_treated +priority: 1 +condition: "step1_death_place!='Health Facility'" +actions: + - "isRelevant = true" +--- +name: step1_mccd_conducted +description: mccd_conducted +priority: 1 +condition: "step1_death_place == 'Health Facility'" +actions: + - "isRelevant = true" +--- +name: step1_physician_name +description: Name of physician signing MCCD +priority: 1 +condition: "step1_mccd_conducted=='Yes'" +actions: + - "isRelevant = true" +--- +name: step1_physician_position +description: Position of physician signing MCCD +priority: 1 +condition: "step1_mccd_conducted=='Yes'" +actions: + - "isRelevant = true" +--- +name: step1_know_death_cause +description: know_death_cause +priority: 1 +condition: "!step1_death_place.equals('Health Facility')" +actions: + - "isRelevant = true" +--- +name: step1_death_cause +description: death_cause +priority: 1 +condition: "step1_know_death_cause=='Yes' || step1_mccd_conducted=='Yes'" +actions: + - "isRelevant = true" +--- +name: step1_deceased_pregnant +description: deceased_pregnant +priority: 1 +condition: "step1_sex=='Female' && ((step1_dob != '' && (helper.formatDate(step1_dob,'y') > 14 && helper.formatDate(step1_dob,'y') < 50)) || (step1_age != '' && (step1_age > 14 && step1_age < 50)))" +actions: + - "isRelevant = true" +--- +name: step1_still_born_death +description: still_born_death +priority: 1 +condition: "(step1_dob != '' && (helper.formatDate(step1_dob,'d') >= 0 && helper.formatDate(step1_dob,'d') < 27))" +actions: + - "isRelevant = true" +--- +name: step1_pregnant_died +description: pregnant_died +priority: 1 +condition: "(step1_sex=='Female' && step1_deceased_pregnant=='Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_fields +description: informant_fields +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_name +description: informant_name +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_relationship +description: informant_relationship +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_address +description: informant_address +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_informant_phone +description: informant_phone +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_fields +description: official_fields +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_name +description: official_name +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_ID +description: official_ID +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_position +description: official_position +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_address +description: official_address +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" +--- +name: step1_official_number +description: official_number +priority: 1 +condition: "step1_received_death_certificate.equals('Yes') || step1_death_notification_done.equals('Yes')" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/pnc-health-facility-schedule-rule.yml b/opensrp-chw/src/crvs/assets/rule/pnc-health-facility-schedule-rule.yml new file mode 100644 index 0000000000..53bfad5cd9 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/pnc-health-facility-schedule-rule.yml @@ -0,0 +1,30 @@ +--- +name: schedule_one +description: day one +priority: 1 +condition: "visitRule.getLastVisitDifference() <= 2 && !visitRule.isValidateExpired(7)" +actions: + - "visitRule.setVisitName(1)" + - "visitRule.setDueDiff(1)" + - "visitRule.setOverdueDiff(2)" + - "visitRule.setExpiryDiff(7)" +--- +name: schedule_two +description: day seven +priority: 2 +condition: "visitRule.getLastVisitDifference() < 42 && !visitRule.isValidateExpired(42)" +actions: + - "visitRule.setVisitName(7)" + - "visitRule.setDueDiff(7)" + - "visitRule.setOverdueDiff(8)" + - "visitRule.setExpiryDiff(42)" +--- +name: schedule_three +description: day forty_two +priority: 3 +condition: "visitRule.getLastVisitDifference() < 1000 && !visitRule.isValidateExpired(1000)" +actions: + - "visitRule.setVisitName(42)" + - "visitRule.setDueDiff(42)" + - "visitRule.setOverdueDiff(43)" + - "visitRule.setExpiryDiff(1000)" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/pnc-home-visit-rules.yml b/opensrp-chw/src/crvs/assets/rule/pnc-home-visit-rules.yml new file mode 100644 index 0000000000..f26221a83b --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/pnc-home-visit-rules.yml @@ -0,0 +1,41 @@ +name: after_two +description: after two days +priority: 1 +condition: "pncVisitAlertRule.isValid(2,10000,3)" +actions: + - "pncVisitAlertRule.setVisitID('2')" +--- +name: after_three +description: after three days +priority: 1 +condition: "pncVisitAlertRule.isValid(3,4,14)" +actions: + - "pncVisitAlertRule.setVisitID('3')" +--- +name: after_fourteen_days +description: after fourteen days +priority: 1 +condition: "pncVisitAlertRule.isValid(14,15,21)" +actions: + - "pncVisitAlertRule.setVisitID('14')" +--- +name: after_twenty_one_days +description: after twenty one days +priority: 1 +condition: "pncVisitAlertRule.isValid(21,22,28)" +actions: + - "pncVisitAlertRule.setVisitID('21')" +--- +name: after_twenty_eight_days +description: after twenty eight days +priority: 1 +condition: "pncVisitAlertRule.isValid(28,29,49)" +actions: + - "pncVisitAlertRule.setVisitID('28')" +--- +name: after_forty_nine_days +description: after forty nine days +priority: 1 +condition: "pncVisitAlertRule.isValid(49,50,10000)" +actions: + - "pncVisitAlertRule.setVisitID('49')" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/pnc_family_planning_relevance.yml b/opensrp-chw/src/crvs/assets/rule/pnc_family_planning_relevance.yml new file mode 100644 index 0000000000..a9fa781a9e --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/pnc_family_planning_relevance.yml @@ -0,0 +1,14 @@ +--- +name: step1_fp_start_date +description: fp_start_date relevance +priority: 1 +condition: "step1_fp_method == 'Tablets' || step1_fp_method == 'Injectable' || step1_fp_method == 'IUD'" +actions: + - "isRelevant = true" +--- +name: step1_fp_method +description: fp_method relevance +priority: 1 +condition: "step1_fp_counseling == 'Yes'" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/assets/rule/sick_child_calculation.yml b/opensrp-chw/src/crvs/assets/rule/sick_child_calculation.yml new file mode 100644 index 0000000000..9c63574668 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/sick_child_calculation.yml @@ -0,0 +1,364 @@ +name: step4_fast_breathing +description: Calculated field for diagnosis of fast breathing. +priority: 1 +condition: "step3_main_symptoms.contains('difficult_breathing')" +actions: + - 'calculation = (((step1_age_in_months >= 2 && step1_age_in_months < 12 && step4_breaths_minute >= 50) || + (step1_age_in_months >= 12 && step1_age_in_months < 60 && step4_breaths_minute >= 40))? 1 : 0)' +--- +name: step4_fast_breathing2 +description: Calculated field for diagnosis of fast breathing. +priority: 1 +condition: "step3_main_symptoms.contains('difficult_breathing')" +actions: + - 'calculation = (((step1_age_in_months >= 2 && step1_age_in_months < 12 && step4_breaths_minute2 >= 50) || + (step1_age_in_months >= 12 && step1_age_in_months < 60 && step4_breaths_minute2 >= 40))? 1 : 0)' +--- +name: step4_fast_breathing_final +description: Fast breathing final calculation +priority: 1 +condition: "step3_main_symptoms.contains('difficult_breathing')" +actions: + - 'calculation = (step4_fast_breathing2 != null ? step4_fast_breathing2 : step4_fast_breathing)' +--- +name: step4_chest_indrawing +description: Chest Indrawing calculation +priority: 1 +condition: "step3_main_symptoms.contains('difficult_breathing')" +actions: + - 'calculation = ((step4_indrawing_bronchodilator.contains("no") || (step4_indrawing_bronchodilator.isEmpty() && step4_breathing_symptoms.contains("chest_indrawing"))) ? 1 : 0)' +--- +name: step4_severe_pneumonia +description: Severe pneumonia calculation +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - 'calculation = ((!step2_danger_signs.contains("None") || step4_breathing_symptoms.contains("stridor"))? 1 : 0)' +--- +name: step4_pneumonia +description: pneumonia calculation +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - 'calculation = (((step4_severe_pneumonia == 0 && step4_fast_breathing_final == 1) || step4_chest_indrawing == 1)? 1 : 0)' +--- +name: step4_cough_cold +description: Cough cold calculation +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - 'calculation = ((step4_severe_pneumonia == 0 && step4_pneumonia == 0)? 1 : 0)' +--- +name: step5_lethargic_unconcious_calc +description: Lethargic unconcious calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_gen_condition.contains("lethargic_unconcious"))? 1 : 0)' +--- +name: step5_sunken_eyes_calc +description: Sunken eyes calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sunken_eyes.contains("yes"))? 1 : 0)' +--- +name: step5_not_able_drink +description: Not able to drink calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_drinking.contains("drinking_poorly"))? 1 : 0)' +--- +name: step5_drinks +description: Drinks calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sunken_eyes.contains("drinking_eargerly"))? 1 : 0)' +--- +name: step5_pinched_skin_slowly +description: Pinched skin calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_pinching.contains("skin_very_slowly"))? 1 : 0)' +--- +name: step5_restless_irritable_calc +description: Restless irritable calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_gen_condition.contains("restless_irritable"))? 1 : 0)' +--- +name: step5_sev_dehydration_class +description: Severe dehydration class calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = (step5_lethargic_unconcious_calc + step5_sunken_eyes_calc + step5_not_able_drink + step5_not_able_drink + step5_pinched_skin_slowly)' +--- +name: step5_sev_dehydration +description: Severe dehydration calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sev_dehydration_class > 2)? 1 : 0)' +--- +name: step5_some_dehydration_class +description: Some dehydration class calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = (step5_restless_irritable_calc + step5_sunken_eyes_calc + step5_drinks + step5_pinched_skin_slowly)' +--- +name: step5_some_dehydration +description: Some dehydration calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_some_dehydration_class > 2 && step5_sev_dehydration == 0)? 1 : 0)' +--- +name: step5_no_dehydration +description: No dehydration calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sev_dehydration == 0 && step5_some_dehydration == 0)? 1 : 0)' +--- +name: step5_sev_persistent_diarrhoea +description: Severe persistent diarrhoea calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = (((step5_sev_dehydration == 1 || step5_some_dehydration == 1) && step5_diarrhoea_period >= 14)? 1 : 0)' +--- +name: step5_persistent_diarrhoea +description: Persistent diarrhoea calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_no_dehydration == 1 && step5_diarrhoea_period > 14)? 1 : 0)' +--- +name: step5_dysentery +description: Dysentry calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = (step5_blood_stool.contains("yes")? 1 : 0)' +--- +name: step5_sev_dehydratn_treat1_calc +description: Severe dehydration treatment calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sev_dehydration == 1 && (step4_severe_pneumonia == 0 || step2_danger_signs.contains("None")))? 1 : 0)' +--- +name: step5_sev_dehydratn_treat2_calc +description: Severe dehydration treatment 2 calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sev_dehydration == 1 && (step4_severe_pneumonia == 1 || step2_danger_signs.contains("None")))? 1 : 0)' +--- +name: step5_sev_dehydratn_treat3_calc +description: Severe dehydration treatment 3 calculation +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - 'calculation = ((step5_sev_dehydration == 1 && step1_age_in_months >= 2 && step5_cholera_present.contains("yes"))? 1 : 0)' +--- +name: step6_malaria_test +description: Malaria test calculation +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = (((step2_danger_signs.contains("None") && step4_severe_pneumonia == 0 && step5_sev_dehydration == 0 && step5_sev_persistent_diarrhoea == 0 && step6_fever.contains("yes") && step6_malaria_risk.contains("high") && step6_travel_malaria_area.contains("yes")) || (step6_fever_causes.contains("none_fever_cause") && step6_malaria_risk.contains("low") && step6_travel_malaria_area.contains("no")))? 1 : 0)' +--- +name: step6_vsf_disease +description: Dysentry calculation +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = (((!step2_danger_signs.contains("None") || step6_fever_causes.contains("stiff_neck")) && !step6_malaria_risk.contains("no_risk"))? 1 : 0)' +--- +name: step6_no_test_malaria +description: Malaria diagnosis when test is not available calculation +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = ((step2_danger_signs.contains("None") && step4_severe_pneumonia == 0 && step5_sev_dehydration == 0 && step5_sev_persistent_diarrhoea == 0 && (step6_malaria_risk.contains("high") && step6_travel_malaria_area.contains("yes") || (step6_fever_causes.contains("none_fever_cause") && step6_malaria_risk.contains("low") && step6_travel_malaria_area.contains("no"))))? 1 : 0)' +--- +name: step6_malaria +description: Calculated field for malaria diagnosis after a test is done. +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = (step6_malaria_results.contains("mal_pos") && !step6_malaria_risk.contains("no_risk")? 1 : 0)' +--- +name: step6_no_malaria +description: Calculated field for no malaria fever disease diagnosis +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = ((step6_malaria_results.contains("mal_neg") && !step6_fever_causes.contains("none_fever_cause") && step6_malaria_risk.contains("no_risk"))? 1 : 0)' +--- +name: step6_vsf_disease2 +description: Calculated field for very sever febrile disease 2 diagnosis +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = ((!step2_danger_signs.contains("None") && step6_fever_causes.contains("stiff_neck") && step6_malaria_risk.contains("no_risk") && step6_travel_malaria_area.contains("no"))? 1 : 0)' +--- +name: step6_illness_fever +description: Calculated field for fever diagnosis +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = ((!step2_danger_signs.contains("None") && !step6_fever_causes.contains("stiff_neck") && step6_malaria_risk.contains("no_risk") && step6_travel_malaria_area.contains("no"))? 1 : 0)' +--- +name: step6_complicated_measles +description: Complicated measles calculation +priority: 1 +condition: "step6_fever.contains('yes') && !step6_add_measles_symptoms.isEmpty()" +actions: + - 'calculation = ((!step2_danger_signs.contains("None") || !step6_add_measles_symptoms.contains("pus_eye") && !step6_add_measles_symptoms.contains("none") && (step6_measles.contains("measles_3_months") || step6_measles.contains("measles_now")))? 1 : 0)' +--- +name: step6_measles_eye_mouth +description: Calculated field for measles with eyes and mouth compications +priority: 1 +condition: "step6_fever.contains('yes') && !step6_add_measles_symptoms.isEmpty()" +actions: + - 'calculation = (((!step6_add_measles_symptoms.contains("clouding_cornea") && !step6_add_measles_symptoms.contains("none")) && (step6_measles.contains("measles_3_months") || step6_measles.contains("measles_now")))? 1 : 0)' +--- +name: step6_illness_measles +description: Calculated field for when the child has measles +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - 'calculation = ((step6_measles.contains("measles_3_months") || step6_measles.contains("measles_now"))? 1 : 0)' +--- +name: step7_mastoiditis_infection +description: Calculated field for when child suffering from Mastoiditis +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - 'calculation = (step7_tender_swelling.contains("yes")? 1 : 0)' +--- +name: step7_acute_ear_infection +description: Calculated field for when child suffering from an acute ear infection +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - 'calculation = (((step7_pus.contains("yes") && (step7_ear_discharge_time < 14 || step7_ear_pain.contains("yes"))) && step7_tender_swelling.contains("no"))? 1 : 0)' +--- +name: step7_chronic_ear_infection +description: Calculated field for when child suffering from a chronic ear infection +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - 'calculation = ((step7_pus.contains("yes") && step7_ear_discharge_time >= 14 && step7_tender_swelling.contains("no"))? 1 : 0)' +--- +name: step7_no_ear_infection +description: Calculated field for when the child does not have any ear infection +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - 'calculation = ((step7_mastoiditis_infection == 0 && step7_acute_ear_infection == 0 && step7_chronic_ear_infection == 0)? 1 : 0)' +--- +name: step9_medical_complications +description: Claculated field for when there are medical complications +priority: 1 +condition: "true" +actions: + - 'calculation = ((!step2_danger_signs.contains("None") || step4_severe_pneumonia == 1 || step4_pneumonia == 1 || step5_sev_dehydration == 1 || + step5_sev_persistent_diarrhoea == 1 || step6_vsf_disease == 1 || step6_vsf_disease2 == 1 || step6_complicated_measles == 1 || step7_mastoiditis_infection == 1)? 1 : 0)' +--- +name: step9_wfh_zscore +description: Calculated field for the z-Scores +priority: 1 +condition: "true" +actions: + - 'calculation = helper.getWFHZScore(step1_gender, step1_child_height, step1_child_weight)' +--- +name: step9_wfh_zscore_note +description: Calculated field for the z-Scores +priority: 1 +condition: "true" +actions: + - "calculation = 'Weight-for-height (WFH) z-score is: ' + step9_wfh_zscore" +--- +name: step9_complicated_sam +description: Calculated field for when child is suffering from complicated severe acute malnutrition +priority: 1 +condition: "true" +actions: + - 'calculation = (((step9_oedema == "yes" || step9_wfh_zscore < -3 || step9_muac < 115) && (step9_medical_complications == 1 + || (step9_rutf_feed.contains("not_finished_rutf") || step9_breastfeeding_prob == "yes")))? 1 : 0)' +--- +name: step9_uncomplicated_sam +description: Calculated field for when child is suffering from complicated severe acute malnutrition +priority: 1 +condition: "true" +actions: + - 'calculation = (((step9_wfh_zscore < -3 || step9_muac < 115) && step9_complicated_sam == 0)? 1 : 0)' +--- +name: step9_mam +description: Calculated field for when child is suffering from acute malnutrition +priority: 1 +condition: "true" +actions: + - 'calculation = ((((step9_wfh_zscore >= -3 && step9_wfh_zscore < -2) || (step9_muac >= 115 && step9_muac <= 125)) && step9_complicated_sam == 0 + && step9_uncomplicated_sam == 0)? 1 : 0)' +--- +name: step9_no_acute_maln +description: Calculated field for when the child is not sufferingfrom acute malnutrition +priority: 1 +condition: "true" +actions: + - 'calculation = (((step9_wfh_zscore >= -2 || step9_muac >= 125) && step9_complicated_sam == 0 && step9_uncomplicated_sam == 0 && step9_mam == 0)? 1 : 0)' +--- +name: step8_severe_anaemia +description: Calculated field for severe anaemia +priority: 1 +condition: "true" +actions: + - 'calculation = (step8_palmar_pallor.contains("severe")? 1 : 0)' +--- +name: step8_anaemia +description: Calculated field for anaemia +priority: 1 +condition: "true" +actions: + - 'calculation = (step8_palmar_pallor.contains("some")? 1 : 0)' +--- +name: step8_no_anaemia +description: Calculated field for no anaemia +priority: 1 +condition: "true" +actions: + - 'calculation = (step8_palmar_pallor.contains("no_pallor")? 1 : 0)' +--- +name: step10_confirmed_hiv +description: Calculated field for when the child has confirmed HIV infection +priority: 1 +condition: "true" +actions: + - 'calculation = ((step10_child_test_result.contains("v_pos") || step10_child_test_result.contains("s_pos") || step10_child_hiv_test2.contains("v_pos") || (step10_child_hiv_test2.contains("s_pos") && step1_age_in_months >= 18))? 1 : 0)' +--- +name: step10_child_hiv_exposed +description: Calculated field for when the child is HIV exposed +priority: 1 +condition: "true" +actions: + - "calculation = ((((step10_mother_test_result.contains('positive') && (step10_child_test_result.contains('v_neg') || step10_child_hiv_test2.contains('v_neg'))) && + (step10_hiv_breastfeeding.contains('yes') || step10_hiv_breastfeeding_now.contains('yes'))) || + (step10_mother_test_result.contains('positive') && (step10_child_hiv_test.contains('no') || step10_child_test_result.contains('s_pos') || step10_child_hiv_test2.contains.('s_pos')) + && step1_age_in_months >= 18))? 1 : 0)" +--- +name: step10_hiv_unlikely +description: Calculated field for when the child HIV infection is unlikely +priority: 1 +condition: "true" +actions: + - "calculation = ((step10_mother_test_result.contains('negative') || step10_child_test_result.contains('v_neg') || step10_child_hiv_test2.contains('v_neg') || step10_child_hiv_test2.contains('s_neg'))? 1 : 0)" diff --git a/opensrp-chw/src/crvs/assets/rule/sick_child_relevance.yml b/opensrp-chw/src/crvs/assets/rule/sick_child_relevance.yml new file mode 100644 index 0000000000..4e7cb0ef77 --- /dev/null +++ b/opensrp-chw/src/crvs/assets/rule/sick_child_relevance.yml @@ -0,0 +1,1008 @@ +--- +name: step2_very_sev_disease +description: very_sev_disease toaster +priority: 1 +condition: "!step2_danger_signs.contains('None') && !step2_danger_signs.isEmpty()" +actions: + - "isRelevant = true" +--- +name: step2_diazepam_given +description: Diazepam Given +priority: 1 +condition: "step2_danger_signs.contains('child_convulsing_now')" +actions: + - "isRelevant = true" +--- +name: step3_no_symptoms +description: no_symptoms toaster +priority: 1 +condition: "step2_danger_signs.contains('None') && step3_main_symptoms.contains('no_symptom')" +actions: + - "isRelevant = true" +--- +name: step4_difficult_breathing +description: Difficult breathing +priority: 1 +condition: "step3_main_symptoms.contains('difficult_breathing')" +actions: + - "isRelevant = true" +--- +name: step4_period_difficult_breathing +description: Period of difficult breathing or cough +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_breaths_minute_procedure +description: Breaths per minute procedure toaster +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_breaths_minute +description: Breaths per minute +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_breathing_symptoms +description: Breathing symptoms +priority: 1 +condition: "step4_difficult_breathing.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_bronchodilator +description: bronchodilator toaster +priority: 1 +condition: "step4_breathing_symptoms.contains('wheezing') && step4_fast_breathing == 1 || step4_breathing_symptoms.contains('chest_indrawing')" +actions: + - "isRelevant = true" +--- +name: step4_bronchodilator_given +description: bronchodilator given +priority: 1 +condition: "step4_breathing_symptoms.contains('wheezing') && step4_fast_breathing == 1 || step4_breathing_symptoms.contains('chest_indrawing')" +actions: + - "isRelevant = true" +--- +name: step4_breaths_minute2_procedure +description: Breaths per minute 2 procedure toaster +priority: 1 +condition: "step4_bronchodilator_given.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_breaths_minute2 +description: Breaths per minute 2 +priority: 1 +condition: "step4_bronchodilator_given.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_indrawing_bronchodilator +description: Indrawing bronchodilator +priority: 1 +condition: "step4_bronchodilator_given.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_hiv_exposure +description: HIV Exposure +priority: 1 +condition: "step4_chest_indrawing == 1" +actions: + - "isRelevant = true" +--- +name: step4_severe_pneumonia_note +description: Severe pneumonia toaster +priority: 1 +condition: "step4_severe_pneumonia == 1" +actions: + - "isRelevant = true" +--- +name: step4_pneumonia_note +description: pneumonia toaster +priority: 1 +condition: "step4_pneumonia == 1" +actions: + - "isRelevant = true" +--- +name: step4_cough_cold_note +description: Cold cough toaster +priority: 1 +condition: "step4_cough_cold == 1" +actions: + - "isRelevant = true" +--- +name: step4_severe_pneumonia_treat_note +description: Severe pneumonia treatment toaster +priority: 1 +condition: "step4_severe_pneumonia == 1" +actions: + - "isRelevant = true" +--- +name: step4_chest_indrawing_treat_note +description: Chest indrawing treatment toaster +priority: 1 +condition: "step4_chest_indrawing == 1 && step4_hiv_exposure.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_chest_indraw_hiv +description: Chest indrawing treatment given +priority: 1 +condition: "step4_chest_indrawing == 1 && step4_hiv_exposure.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step4_pneumonia_treatment_note +description: Pneumonia treatment toaster +priority: 1 +condition: "step4_pneumonia == 1" +actions: + - "isRelevant = true" +--- +name: step4_pneumonia_treatment +description: Pneumonia treatment +priority: 1 +condition: "step4_pneumonia == 1" +actions: + - "isRelevant = true" +--- +name: step4_cold_treatment_note +description: Cold or cough treatment toaster +priority: 1 +condition: "step4_cough_cold == 1" +actions: + - "isRelevant = true" +--- +name: step4_cough_cold_treatment +description: Cold or cough treatment +priority: 1 +condition: "step4_cough_cold == 1" +actions: + - "isRelevant = true" +--- +name: step5_diarrhoea +description: Diarrhoea check +priority: 1 +condition: "step3_main_symptoms.contains('diarrhoea')" +actions: + - "isRelevant = true" +--- +name: step5_diarrhoea_period +description: Diarrhoea period +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_blood_stool +description: Blood in stool +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_gen_condition +description: General condition of child +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_sunken_eyes +description: Has sunken eyes +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_sunken_eyes +description: Has sunken eyes +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_sunken_eyes +description: Has sunken eyes +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_drinking +description: How is the child drinking +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_pinching +description: How is the skin reacting +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_cholera_present +description: Has there been cholera instances +priority: 1 +condition: "step5_diarrhoea.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step5_sev_dehydration_note +description: Severe dehydration toaster +priority: 1 +condition: "step5_sev_dehydration == 1" +actions: + - "isRelevant = true" +--- +name: step5_some_dehydration_note +description: Some dehydration toaster +priority: 1 +condition: "step5_some_dehydration == 1" +actions: + - "isRelevant = true" +--- +name: step5_no_dehydration_note +description: No dehydration toaster +priority: 1 +condition: "step5_no_dehydration == 1" +actions: + - "isRelevant = true" +--- +name: step5_sev_persistent_diarrhoea_note +description: Severe persistent diarrhoea toaster +priority: 1 +condition: "step5_sev_persistent_diarrhoea == 1" +actions: + - "isRelevant = true" +--- +name: step5_persistent_diarrhoea_note +description: Persistent diarrhoea toaster +priority: 1 +condition: "step5_persistent_diarrhoea == 1" +actions: + - "isRelevant = true" +--- +name: step5_dysentery_note +description: Dysentry toaster +priority: 1 +condition: "step5_dysentery == 1" +actions: + - "isRelevant = true" +--- +name: step5_sev_dehydratn_treat1 +description: Severe dehydration treatment +priority: 1 +condition: "step5_sev_dehydratn_treat1_calc == 1" +actions: + - "isRelevant = true" +--- +name: step5_sev_dehydratn_treat2 +description: Severe dehydration treatment 2 +priority: 1 +condition: "step5_sev_dehydratn_treat2_calc == 1" +actions: + - "isRelevant = true" +--- +name: step5_sev_dehydratn_treat3 +description: Severe dehydration treatment 3 +priority: 1 +condition: "step5_sev_dehydratn_treat3_calc == 1" +actions: + - "isRelevant = true" +--- +name: step5_some_dehydration_others +description: Some dehydration others treatment +priority: 1 +condition: "step5_some_dehydration == 1 && (step4_severe_pneumonia == 0 || step2_danger_signs.contains('None'))" +actions: + - "isRelevant = true" +--- +name: step5_some_dehydration_treat +description: Some dehydration treatment +priority: 1 +condition: "step5_some_dehydration == 1 && (step4_severe_pneumonia == 1 || !step2_danger_signs.contains('None'))" +actions: + - "isRelevant = true" +--- +name: step5_no_dehydration_treat +description: No dehydration treatment +priority: 1 +condition: "step5_no_dehydration == 1" +actions: + - "isRelevant = true" +--- +name: step5_sev_persistent_diarrhoea_treatment +description: Severe persistent diarrhoea treatment +priority: 1 +condition: "step5_sev_persistent_diarrhoea == 1" +actions: + - "isRelevant = true" +--- +name: step5_persistent_diarrhoea_treatment +description: persistent diarrhoea treatment +priority: 1 +condition: "step5_persistent_diarrhoea == 1" +actions: + - "isRelevant = true" +--- +name: step5_dysentery_treat +description: Dysentery treatment +priority: 1 +condition: "step5_dysentery == 1" +actions: + - "isRelevant = true" +--- +name: step6_fever +description: Fever +priority: 1 +condition: "step3_main_symptoms.contains('fever')" +actions: + - "isRelevant = true" +--- +name: step6_fever_note +description: Fever toaster +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_malaria_risk +description: Is child sleeping under net +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_travel_malaria_area +description: Has child travelled to Malaria risk area +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_fever_period +description: Days child has had fever +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_fever_everyday +description: Has fever been present every day +priority: 1 +condition: "step6_fever_period > 7" +actions: + - "isRelevant = true" +--- +name: step6_measles +description: Whether child has had measles in the last 3 months or is having measles +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_fever_causes +description: All possible causes of fever +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_measles_symptoms +description: Look and feel for measles symptoms +priority: 1 +condition: "step6_fever.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_malaria_test_note +description: Do malaria test toaster +priority: 1 +condition: "step6_malaria_test == 1" +actions: + - "isRelevant = true" +--- +name: step6_malaria_test_done +description: Confirmation that the malaria test was done +priority: 1 +condition: "step6_malaria_test == 1" +actions: + - "isRelevant = true" +--- +name: step6_malaria_results +description: Results that show whether child has malaria +priority: 1 +condition: "step6_malaria_test_done.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step6_add_measles_symptoms +description: Additional symptoms for child with measles +priority: 1 +condition: "step6_measles.contains('measles_3_months') || step6_measles.contains('measles_now')" +actions: + - "isRelevant = true" +--- +name: step6_vsf_disease_note +description: vsf disease toaster +priority: 1 +condition: "step6_vsf_disease == 1" +actions: + - "isRelevant = true" +--- +name: step6_no_test_malaria_note +description: No test malaria toaster +priority: 1 +condition: "step6_no_test_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_malaria_note +description: Malaria note toaster +priority: 1 +condition: "step6_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_no_malaria_note +description: No Malaria note toaster +priority: 1 +condition: "step6_no_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_vsf_disease2_note +description: vsf_disease2 toaster +priority: 1 +condition: "step6_vsf_disease2 == 1" +actions: + - "isRelevant = true" +--- +name: step6_illness_fever_note +description: Illness fever toaster +priority: 1 +condition: "step6_illness_fever == 1" +actions: + - "isRelevant = true" +--- +name: step6_complicated_measles_note +description: Complicated measles toaster +priority: 1 +condition: "step6_complicated_measles == 1" +actions: + - "isRelevant = true" +--- +name: step6_measles_eye_mouth_note +description: measles with eye and mouth complications toaster +priority: 1 +condition: "step6_measles_eye_mouth == 1" +actions: + - "isRelevant = true" +--- +name: step6_illness_measles_note +description: Child has measles toaster +priority: 1 +condition: "step6_illness_measles == 1" +actions: + - "isRelevant = true" +--- +name: step6_fever_treatment_note +description: Fever treatment toaster +priority: 1 +condition: "step6_vsf_disease == 1 || step6_malaria == 1 || step6_no_malaria == 1 || step6_vsf_disease2 == 1 || step6_illness_fever == 1 || step6_complicated_measles == 1 || step6_measles_eye_mouth || step6_illness_measles == 1" +actions: + - "isRelevant = true" +--- +name: step6_vsf_disease_treat_note +description: Note on very severe febrile disease +priority: 1 +condition: "step6_vsf_disease == 1" +actions: + - "isRelevant = true" +--- +name: step6_vsf_disease_treat +description: List of treatments for very severe febrile disease +priority: 1 +condition: "step6_vsf_disease == 1" +actions: + - "isRelevant = true" +--- +name: step6_malaria_treat_note +description: Note of malaria treatment +priority: 1 +condition: "step6_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_malaria_treat +description: List of treatments for malaria +priority: 1 +condition: "step6_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_no_malaria_treat_note +description: Note on treatments of no malaria fever +priority: 1 +condition: "step6_no_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_no_malaria_treat +description: List of treatments for no malaria fever +priority: 1 +condition: "step6_no_malaria == 1" +actions: + - "isRelevant = true" +--- +name: step6_vsf_disease2_treat_note +description: Note of treatments for very severe febrile disease +priority: 1 +condition: "step6_vsf_disease2 == 1" +actions: + - "isRelevant = true" +--- +name: step6_vsf_disease2_treat +description: List of treatments for very severe febrile disease2 +priority: 1 +condition: "step6_vsf_disease2 == 1" +actions: + - "isRelevant = true" +--- +name: step6_illness_fever_treat_note +description: Note for treatment of fever +priority: 1 +condition: "step6_illness_fever == 1" +actions: + - "isRelevant = true" +--- +name: step6_illness_fever_treat +description: List of treatments for fever +priority: 1 +condition: "step6_illness_fever == 1" +actions: + - "isRelevant = true" +--- +name: step6_complicated_measles_treat_note +description: Note for treatment of complicated measles +priority: 1 +condition: "step6_complicated_measles == 1" +actions: + - "isRelevant = true" +--- +name: step6_complicated_measles_treat +description: List of treatments for complicated measles +priority: 1 +condition: "step6_complicated_measles == 1" +actions: + - "isRelevant = true" +--- +name: step6_measles_eye_mouth_treat_note +description: Note for treatment of measles with eye or mouth complications +priority: 1 +condition: "step6_measles_eye_mouth == 1" +actions: + - "isRelevant = true" +--- +name: step6_measles_eye_mouth_treat +description: List of treatments for measles with eye and mouth complications +priority: 1 +condition: "step6_measles_eye_mouth == 1" +actions: + - "isRelevant = true" +--- +name: step6_illness_measles_treat_note +description: Note for treatment of measles +priority: 1 +condition: "step6_illness_measles == 1" +actions: + - "isRelevant = true" +--- +name: step6_illness_measles_treat +description: List of treatments for measles +priority: 1 +condition: "step6_illness_measles == 1" +actions: + - "isRelevant = true" +--- +name: step7_ear_problem +description: Does child have ear problem +priority: 1 +condition: "step3_main_symptoms.contains('ear_problems')" +actions: + - "isRelevant = true" +--- +name: step7_ear_pain +description: Find out whether child's ear is in pain +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step7_ear_discharge +description: Find out whether there is any discharge from the ear +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step7_ear_discharge_time +description: How long there has been discharge +priority: 1 +condition: "step7_ear_problem.contains('yes') && step7_ear_discharge.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step7_pus +description: Check for pus around the ear +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step7_tender_swelling +description: Check for tender swelling behind the ear +priority: 1 +condition: "step7_ear_problem.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step7_mastoiditis_infection_note +description: Mastoiditis infection toaster +priority: 1 +condition: "step7_mastoiditis_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_acute_ear_infection_note +description: Acute ear infection toaster +priority: 1 +condition: "step7_acute_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_chronic_ear_infection_note +description: Chronic ear infection toaster +priority: 1 +condition: "step7_chronic_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_no_ear_infection_note +description: No ear infection toaster +priority: 1 +condition: "step7_no_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_ear_problem_treatment_note +description: Ear treatment toaster +priority: 1 +condition: "step7_mastoiditis_infection == 1 || step7_acute_ear_infection == 1 || step7_chronic_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_mastoiditis_treat +description: Treatment for mastoiditis +priority: 1 +condition: "step7_mastoiditis_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_acute_ear_treat +description: Treatment for chronic ear infection +priority: 1 +condition: "step7_acute_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_chronic_ear_treat +description: Treatment for acute ear infection +priority: 1 +condition: "step7_chronic_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step7_ear_treatment_note +description: Treatment for No ear infection +priority: 1 +condition: "step7_no_ear_infection == 1" +actions: + - "isRelevant = true" +--- +name: step9_muac +description: Child muac measurement using a MUAC tape +priority: 1 +condition: "step1_age_in_months >= 6" +actions: + - "isRelevant = true" +--- +name: step9_rutf_feed +description: How the child fed on offered RUFT - for children over 6 months +priority: 1 +condition: "((step9_wfh_zscore < -3 || step9_muac < 115) && step1_age_in_months >= 6 && step9_medical_complications == 0)" +actions: + - "isRelevant = true" +--- +name: step9_breastfeeding_prob +description: Whether child is able ot not to breastfeed +priority: 1 +condition: "((step9_wfh_zscore < -3 || step9_muac < 115) && step1_age_in_months < 6 && step9_medical_complications == 0)" +actions: + - "isRelevant = true" +--- +name: step9_complicated_sam_note +description: Complicated severe acute malnutrition toaster +priority: 1 +condition: "step9_complicated_sam == 1" +actions: + - "isRelevant = true" +--- +name: step9_uncomplicated_sam_note +description: Uncomplicated severe acute malnutrition toaster +priority: 1 +condition: "step9_uncomplicated_sam == 1" +actions: + - "isRelevant = true" +--- +name: step9_mam_note +description: Moderate acute malnutrition toaster +priority: 1 +condition: "step9_mam == 1" +actions: + - "isRelevant = true" +--- +name: step9_no_acute_maln_note +description: No acute malnutrition toaster +priority: 1 +condition: "step9_no_acute_maln == 1" +actions: + - "isRelevant = true" +--- +name: step9_acute_malnutrition_treatment_note +description: Acute malnutrition treatment toaster +priority: 1 +condition: "step9_complicated_sam == 1 || step9_uncomplicated_sam == 1 || step9_mam == 1 || step9_no_acute_maln == 1" +actions: + - "isRelevant = true" +--- +name: step9_compl_sev_maln_treat +description: List of treatments given to child suffering from complicated severe malnutrition +priority: 1 +condition: "step9_complicated_sam == 1" +actions: + - "isRelevant = true" +--- +name: step9_sev_acute_maln_treat +description: List of treatnents for child with severe acute malnutrition +priority: 1 +condition: "step9_uncomplicated_sam == 1" +actions: + - "isRelevant = true" +--- +name: step9_acute_maln_treat +description: List of treatments given to child with acute malnutrition +priority: 1 +condition: "step9_mam == 1" +actions: + - "isRelevant = true" +--- +name: step9_no_acute_maln_treat +description: List of treatment for child with no acute malnutrition +priority: 1 +condition: "step9_no_acute_maln == 1" +actions: + - "isRelevant = true" +--- +name: step8_sev_palmar_note +description: Severe palmar pallor toaster +priority: 1 +condition: "step8_palmar_pallor.contains('severe')" +actions: + - "isRelevant = true" +--- +name: step8_severe_anaemia_note +description: Severe anaemia toaster +priority: 1 +condition: "step8_severe_anaemia == 1" +actions: + - "isRelevant = true" +--- +name: step8_anaemia_note +description: Anaemia toaster +priority: 1 +condition: "step8_anaemia == 1" +actions: + - "isRelevant = true" +--- +name: step8_no_anaemia_note +description: No Anaemia toaster +priority: 1 +condition: "step8_no_anaemia == 1 && step1_age_in_months < 24" +actions: + - "isRelevant = true" +--- +name: step8_feeding_problem +description: Check for whether a child with no anaemia has any feeding problems +priority: 1 +condition: "step8_no_anaemia == 1 && step1_age_in_months < 24" +actions: + - "isRelevant = true" +--- +name: step8_no_anaemia_treat_under2 +description: Treatment for children with no anaemia and are over 2 years toaster +priority: 1 +condition: "step8_no_anaemia == 1 && step1_age_in_months >= 24" +actions: + - "isRelevant = true" +--- +name: step8_anemia_treatment_note +description: Anaemia Treatment toaster +priority: 1 +condition: "step8_severe_anaemia == 1 || step8_anaemia == 1 || step8_no_anaemia == 1" +actions: + - "isRelevant = true" +--- +name: step8_anaemia_treat_refer +description: Refer Anaemia Treatment +priority: 1 +condition: "step8_severe_anaemia == 1" +actions: + - "isRelevant = true" +--- +name: step8_anaemia_treat +description: Treatment for anaemia +priority: 1 +condition: "step8_anaemia == 1" +actions: + - "isRelevant = true" +--- +name: step8_feeding_problem_follow_up +description: Follow-up after 5 days if feeding is a problem +priority: 1 +condition: "step8_feeding_problem.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step10_mother_hiv_test +description: Has mother had test +priority: 1 +condition: "step10_child_hiv_care.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_mother_test_result +description: Test result for mother HIV if had already taken test +priority: 1 +condition: "step10_mother_hiv_test.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step10_child_hiv_test +description: Has child had HIV test +priority: 1 +condition: "step10_child_hiv_care.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_child_hiv_test +description: Has child had HIV test +priority: 1 +condition: "step10_child_hiv_care.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_child_test_result +description: Has child had HIV test +priority: 1 +condition: "step10_child_hiv_test.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step10_hiv_breastfeeding +description: Whether child was breastfeeding at the time of test or 6 weeks prior +priority: 1 +condition: "step10_mother_test_result.contains('positive') || step10_child_test_result.contains('v_neg') || step10_child_test_result.contains('s_neg') || step10_child_hiv_test.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_hiv_breastfeeding_now +description: Whether child is currently breastfeeding +priority: 1 +condition: "step10_mother_test_result.contains('positive') || step10_child_test_result.contains('v_neg') || step10_child_test_result.contains('s_neg') || step10_child_hiv_test.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_on_arv +description: Whether mother and child are on ARV prophylaxis +priority: 1 +condition: "step10_hiv_breastfeeding.contains('yes') || step10_hiv_breastfeeding_now.contains('yes')" +actions: + - "isRelevant = true" +--- +name: step10_test_mother_results_note +description: Whether mother and child are on ARV prophylaxis +priority: 1 +condition: "step10_mother_hiv_test.contains('no') && step10_child_hiv_test.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_child_hiv_test2_note +description: Whether mother and child are on ARV prophylaxis +priority: 1 +condition: "step10_child_hiv_test.contains('no') && step10_mother_test_result.contains('positive')" +actions: + - "isRelevant = true" +--- +name: step10_test_mother_results +description: Results for the HIV test - Mother +priority: 1 +condition: "step10_mother_hiv_test.contains('no') && step10_child_hiv_test.contains('no')" +actions: + - "isRelevant = true" +--- +name: step10_child_hiv_test2 +description: Childs status after test +priority: 1 +condition: "step10_child_hiv_test.contains('no') && step10_mother_test_result.contains('positive')" +actions: + - "isRelevant = true" +--- +name: step10_confirmed_hiv_note +description: Confirmed HIV infection displayed toaster +priority: 1 +condition: "step10_confirmed_hiv == 1" +actions: + - "isRelevant = true" +--- +name: step10_child_hiv_exposed_note +description: Confirmed HIV infection displayed toaster +priority: 1 +condition: "step10_child_hiv_exposed == 1" +actions: + - "isRelevant = true" +--- +name: step10_hiv_unlikely_note +description: Child unlikely to have HIV infection toaster +priority: 1 +condition: "step10_hiv_unlikely == 1" +actions: + - "isRelevant = true" +--- +name: step10_hiv_treatment_note +description: HIV treatment toaster +priority: 1 +condition: "step10_confirmed_hiv == 1 || step10_child_hiv_exposed == 1 || step10_hiv_unlikely" +actions: + - "isRelevant = true" +--- +name: step10_confirmed_hiv_treat +description: List of all HIV treatment and services given for HIV confirmed children +priority: 1 +condition: "step10_confirmed_hiv == 1" +actions: + - "isRelevant = true" +--- +name: step10_hiv_exposed +description: List of all HIV treatment and services given for HIV confirmed children +priority: 1 +condition: "step10_child_hiv_exposed == 1" +actions: + - "isRelevant = true" +--- +name: step10_hiv_unlikely_treat +description: Treatment for HIV unlikely child +priority: 1 +condition: "step10_hiv_unlikely == 1" +actions: + - "isRelevant = true" \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/AncMedicalHistoryActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/AncMedicalHistoryActivityFlv.java new file mode 100644 index 0000000000..a27fbc9b7a --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/AncMedicalHistoryActivityFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.activity; + +public class AncMedicalHistoryActivityFlv extends DefaultChwAncMedicalHistoryActivityFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/BirthCertificationRegisterActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/BirthCertificationRegisterActivity.java new file mode 100644 index 0000000000..6d418232b0 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/BirthCertificationRegisterActivity.java @@ -0,0 +1,136 @@ +package org.smartregister.chw.activity; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT; +import static org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT_NUMBER; +import static org.smartregister.chw.core.utils.CoreConstants.DB_CONSTANTS.BASE_ENTITY_ID; +import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.getBirthCertificationChangedForm; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_NOTIFICATION; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_REGISTRATION; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_REG_TYPE; +import static org.smartregister.chw.util.ChildDBConstants.KEY.INFORMANT_REASON; +import static org.smartregister.chw.util.ChildDBConstants.KEY.SYSTEM_BIRTH_NOTIFICATION; +import static org.smartregister.chw.util.CrvsConstants.BIRTH_CERTIFICATE_ISSUE_DATE; +import static org.smartregister.chw.util.CrvsConstants.DOB; +import static org.smartregister.client.utils.constants.JsonFormConstants.MIN_DATE; + +import android.content.Intent; +import android.view.View; + +import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.anc.util.Constants; +import org.smartregister.chw.core.activity.CoreCertificationRegisterActivity; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.fragment.BirthCertificationRegisterFragment; +import org.smartregister.chw.util.DateUtils; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import timber.log.Timber; + +public class BirthCertificationRegisterActivity extends CoreCertificationRegisterActivity { + + @Override + protected void registerBottomNavigation() { + // Hide bottom nav for birth certification register + bottomNavigationHelper = new BottomNavigationHelper(); + bottomNavigationView = findViewById(org.smartregister.R.id.bottom_navigation); + FamilyRegisterActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + bottomNavigationView.setVisibility(View.GONE); + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new BirthCertificationRegisterFragment(); + } + + @Override + protected void onResumption() { + super.onResumption(); + NavigationMenu menu = NavigationMenu.getInstance(this, null, null); + if (menu != null) { + menu.getNavigationAdapter().setSelectedView(CoreConstants.DrawerMenu.BIRTH_NOTIFICATION); + } + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { + try { + String jsonString = data.getStringExtra(Constants.JSON_FORM_EXTRA.JSON); + JSONObject form = new JSONObject(jsonString); + String encounter_type = form.optString(Constants.JSON_FORM_EXTRA.ENCOUNTER_TYPE); + + if (CoreConstants.EncounterType.UPDATE_BIRTH_CERTIFICATION.equalsIgnoreCase(encounter_type)) { + presenter().saveForm(jsonString, getIntent().getStringExtra(CLIENT_TYPE)); + } + } catch (Exception e) { + Timber.e(e); + } + } + } + + @Override + public void startUpdateFormActivity() { + try { + String birthCert = getIntent().getStringExtra(BIRTH_CERT); + String baseEntityId = getIntent().getStringExtra(BASE_ENTITY_ID); + + if (birthCert == null) { + birthCert = ""; + } + + if (StringUtils.isNotBlank(birthCert)) { + startEditCertificationForm(baseEntityId); + } else { + presenter().startCertificationForm(getBirthCertificationChangedForm(), baseEntityId); + } + + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + public void startEditCertificationForm(String baseEntityId) throws Exception { + + Map valueMap = new HashMap<>(); + valueMap.put(BIRTH_CERT, getIntent().getStringExtra(BIRTH_CERT)); + valueMap.put(BIRTH_REGISTRATION, getIntent().getStringExtra(BIRTH_REGISTRATION)); + valueMap.put(BIRTH_NOTIFICATION, getIntent().getStringExtra(ChildDBConstants.KEY.BIRTH_CERT_NOTIFIICATION)); + valueMap.put(BIRTH_CERTIFICATE_ISSUE_DATE, getIntent().getStringExtra(BIRTH_CERTIFICATE_ISSUE_DATE)); + valueMap.put(BIRTH_CERT_NUMBER, getIntent().getStringExtra(BIRTH_CERT_NUMBER)); + valueMap.put(SYSTEM_BIRTH_NOTIFICATION, getIntent().getStringExtra(SYSTEM_BIRTH_NOTIFICATION)); + valueMap.put(BIRTH_REG_TYPE, getIntent().getStringExtra(BIRTH_REG_TYPE)); + valueMap.put(INFORMANT_REASON, getIntent().getStringExtra(INFORMANT_REASON)); + valueMap.put(MIN_DATE, DateUtils.changeDateFormat(Objects.requireNonNull(getIntent().getStringExtra(DOB)))); + + presenter().startEditCertForm(getBirthCertificationChangedForm(), CoreConstants.EventType.UPDATE_BIRTH_CERTIFICATION, baseEntityId, valueMap); + } + + @Override + public List getViewIdentifiers() { + return Arrays.asList("birth_certification_register"); + } + + @Override + public String getFormTitle() { + return getString(R.string.birth_certification); + } + + @Override + public Class getActivityClass() { + return BirthCertificationRegisterActivity.class; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/ChildMedicalHistoryActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/ChildMedicalHistoryActivityFlv.java new file mode 100644 index 0000000000..4604735a16 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/ChildMedicalHistoryActivityFlv.java @@ -0,0 +1,13 @@ +package org.smartregister.chw.activity; + +import org.smartregister.chw.core.activity.DefaultChildMedicalHistoryActivityFlv; +import org.smartregister.chw.core.utils.CoreChildUtils; +import org.smartregister.chw.util.ChildUtilsFlv; + +public class ChildMedicalHistoryActivityFlv extends DefaultChildMedicalHistoryActivityFlv { + + public CoreChildUtils.Flavor getChildUtils() { + return new ChildUtilsFlv(); + } + +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/ChildProfileActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/ChildProfileActivityFlv.java new file mode 100644 index 0000000000..c85bd00bc4 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/ChildProfileActivityFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.activity; + +public class ChildProfileActivityFlv extends DefaultChildProfileActivityFlv { +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/DeathCertificationRegisterActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/DeathCertificationRegisterActivity.java new file mode 100644 index 0000000000..ede7fb010d --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/DeathCertificationRegisterActivity.java @@ -0,0 +1,139 @@ +package org.smartregister.chw.activity; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.anc.util.Constants.TABLES.PREGNANCY_OUTCOME; +import static org.smartregister.chw.core.utils.CoreConstants.DOB; +import static org.smartregister.chw.core.utils.CoreConstants.EventType.UPDATE_DEATH_CERTIFICATION; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.DEATH_CERTIFICATE_ISSUE_DATE; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.DEATH_CERTIFICATE_NUMBER; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.DEATH_NOTIFICATION_DONE; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.RECEIVED_DEATH_CERTIFICATE; +import static org.smartregister.chw.util.Constants.INFORMANT_ADDRESS; +import static org.smartregister.chw.util.Constants.INFORMANT_NAME; +import static org.smartregister.chw.util.Constants.INFORMANT_PHONE; +import static org.smartregister.chw.util.Constants.INFORMANT_RELATIONSHIP; +import static org.smartregister.chw.util.Constants.OFFICIAL_ADDRESS; +import static org.smartregister.chw.util.Constants.OFFICIAL_NAME; +import static org.smartregister.chw.util.Constants.OFFICIAL_NUMBER; +import static org.smartregister.chw.util.Constants.OFFICIAL_POSITION; +import static org.smartregister.chw.util.CrvsConstants.BASE_ENTITY_ID; +import static org.smartregister.chw.util.CrvsConstants.HAS_DEATH_CERTIFICATE; +import static org.smartregister.chw.util.CrvsConstants.OFFICIAL_ID; + +import android.content.Intent; +import android.view.View; + +import org.apache.commons.lang3.StringUtils; +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.anc.util.Constants; +import org.smartregister.chw.core.activity.CoreCertificationRegisterActivity; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.fragment.DeathCertificationRegisterFragment; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import timber.log.Timber; + +public class DeathCertificationRegisterActivity extends CoreCertificationRegisterActivity { + + @Override + protected void registerBottomNavigation() { + // Hide bottom nav for birth certification register + bottomNavigationHelper = new BottomNavigationHelper(); + bottomNavigationView = findViewById(org.smartregister.R.id.bottom_navigation); + FamilyRegisterActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + bottomNavigationView.setVisibility(View.GONE); + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new DeathCertificationRegisterFragment(); + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { + try { + String jsonString = data.getStringExtra(Constants.JSON_FORM_EXTRA.JSON); + JSONObject form = new JSONObject(jsonString); + String encounter_type = form.optString(Constants.JSON_FORM_EXTRA.ENCOUNTER_TYPE); + + if (UPDATE_DEATH_CERTIFICATION.equalsIgnoreCase(encounter_type)) { + String clientType = getIntent().getStringExtra(CLIENT_TYPE); + if (PREGNANCY_OUTCOME.equals(clientType)) { + clientType = CoreConstants.TABLE_NAME.FAMILY_MEMBER; + } + presenter().saveForm(jsonString, clientType); + } + } catch (Exception e) { + Timber.e(e); + } + } + } + + @Override + public List getViewIdentifiers() { + return Arrays.asList("death_certification_register"); + } + + @Override + public void startUpdateFormActivity() { + try { + String death_cert = getIntent().getStringExtra(RECEIVED_DEATH_CERTIFICATE); + String baseEntityId = getIntent().getStringExtra(BASE_ENTITY_ID); + + if (death_cert == null) { + death_cert = ""; + } + + if (StringUtils.isNotBlank(death_cert)) { + startEditCertificationForm(baseEntityId); + } else { + presenter().startCertificationForm(CoreConstants.JSON_FORM.getDeathRegistrationForm(), baseEntityId); + } + + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + public void startEditCertificationForm(String baseEntityId) throws Exception { + + Map valueMap = new HashMap<>(); + valueMap.put(DOB, getIntent().getStringExtra(DOB)); + valueMap.put(HAS_DEATH_CERTIFICATE, getIntent().getStringExtra(RECEIVED_DEATH_CERTIFICATE)); + valueMap.put(DEATH_CERTIFICATE_ISSUE_DATE, getIntent().getStringExtra(DEATH_CERTIFICATE_ISSUE_DATE)); + valueMap.put(DEATH_NOTIFICATION_DONE, getIntent().getStringExtra(DEATH_NOTIFICATION_DONE)); + valueMap.put(DEATH_CERTIFICATE_NUMBER, getIntent().getStringExtra(DEATH_CERTIFICATE_NUMBER)); + valueMap.put(INFORMANT_NAME, getIntent().getStringExtra(INFORMANT_NAME)); + valueMap.put(INFORMANT_RELATIONSHIP, getIntent().getStringExtra(INFORMANT_RELATIONSHIP)); + valueMap.put(INFORMANT_ADDRESS, getIntent().getStringExtra(INFORMANT_ADDRESS)); + valueMap.put(INFORMANT_PHONE, getIntent().getStringExtra(INFORMANT_PHONE)); + valueMap.put(OFFICIAL_NAME, getIntent().getStringExtra(OFFICIAL_NAME)); + valueMap.put(OFFICIAL_ID, getIntent().getStringExtra(OFFICIAL_ID)); + valueMap.put(OFFICIAL_POSITION, getIntent().getStringExtra(OFFICIAL_POSITION)); + valueMap.put(OFFICIAL_ADDRESS, getIntent().getStringExtra(OFFICIAL_ADDRESS)); + valueMap.put(OFFICIAL_NUMBER, getIntent().getStringExtra(OFFICIAL_NUMBER)); + + presenter().startEditCertForm(CoreConstants.JSON_FORM.getDeathRegistrationForm(), UPDATE_DEATH_CERTIFICATION, baseEntityId, valueMap); + + } + + @Override + public String getFormTitle() { + return getString(R.string.death_certification); + } + + @Override + public Class getActivityClass() { + return DeathCertificationRegisterActivity.class; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/FamilyOtherMemberProfileActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/FamilyOtherMemberProfileActivityFlv.java new file mode 100644 index 0000000000..4447cceb6b --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/FamilyOtherMemberProfileActivityFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.activity; + +public class FamilyOtherMemberProfileActivityFlv extends DefaultFamilyOtherMemberProfileActivityFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/LoginActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/LoginActivityFlv.java new file mode 100644 index 0000000000..396387b6a3 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/LoginActivityFlv.java @@ -0,0 +1,17 @@ +package org.smartregister.chw.activity; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.widget.TextView; + +import org.smartregister.chw.BuildConfig; +import org.smartregister.chw.R; + +public class LoginActivityFlv extends DefaultLoginActivityFlv { + + @Override + public void setAppVersionDetails(TextView appVersionDetails, Context context) throws PackageManager.NameNotFoundException { + appVersionDetails.setText(String.format(context.getString(R.string.app_version_with_env), + org.smartregister.util.Utils.getVersion(context), org.smartregister.util.Utils.getBuildDate(true), BuildConfig.SERVER_ENV)); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildActivity.java new file mode 100644 index 0000000000..eec0d5b684 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildActivity.java @@ -0,0 +1,157 @@ +package org.smartregister.chw.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import androidx.fragment.app.Fragment; + +import com.vijay.jsonwizard.constants.JsonFormConstants; +import com.vijay.jsonwizard.domain.Form; + +import org.json.JSONObject; +import org.smartregister.AllConstants; +import org.smartregister.chw.anc.util.Constants; +import org.smartregister.chw.contract.CoreOutOfAreaChildRegisterContract; +import org.smartregister.chw.core.activity.CoreFamilyRegisterActivity; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.fragment.OutOfAreaFragment; +import org.smartregister.chw.model.CoreOutOfAreaChildRegisterModel; +import org.smartregister.chw.presenter.CoreOutOfAreaChildRegisterPresenter; +import org.smartregister.chw.schedulers.ChwScheduleTaskExecutor; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.family.util.Utils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.activity.BaseRegisterActivity; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import timber.log.Timber; + +public class OutOfAreaChildActivity extends BaseRegisterActivity implements CoreOutOfAreaChildRegisterContract.View { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NavigationMenu.getInstance(this, null, null); + + View view = getWindow().getDecorView().findViewById(android.R.id.content); + presenter().registerFloatingActionButton(view, View.VISIBLE); + } + + @Override + protected void registerBottomNavigation() { + bottomNavigationHelper = new BottomNavigationHelper(); + bottomNavigationView = findViewById(org.smartregister.R.id.bottom_navigation); + FamilyRegisterActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + bottomNavigationView.setVisibility(View.GONE); + } + + @Override + protected void initializePresenter() { + presenter = new CoreOutOfAreaChildRegisterPresenter(this, new CoreOutOfAreaChildRegisterModel()); + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new OutOfAreaFragment(); + } + + @Override + protected Fragment[] getOtherFragments() { + return new Fragment[0]; + } + + @Override + protected void onResumption() { + super.onResumption(); + NavigationMenu menu = NavigationMenu.getInstance(this, null, null); + if (menu != null) { + menu.getNavigationAdapter().setSelectedView(CoreConstants.DrawerMenu.OUT_OF_AREA_CHILD); + } + } + + @Override + public void startFormActivity(String s, String s1, Map map) { + // code + } + + @Override + public void startFormActivity(String formName, String entityId, String metaData) { + try { + if (mBaseFragment instanceof OutOfAreaFragment) { + String locationId = Utils.context().allSharedPreferences().getPreference(AllConstants.CURRENT_LOCATION_ID); + presenter().startForm(formName, entityId, metaData, locationId, ""); + } + } catch (Exception e) { + Timber.e(e); + displayToast(getString(org.smartregister.chw.core.R.string.error_unable_to_start_form)); + } + } + + @Override + public void startFormActivity(JSONObject jsonForm) { + Intent intent = new Intent(this, Utils.metadata().familyFormActivity); + intent.putExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON, jsonForm.toString()); + + Form form = new Form(); + form.setName(getString(org.smartregister.chw.core.R.string.add_fam)); + form.setActionBarBackground(org.smartregister.chw.core.R.color.family_actionbar); + form.setNavigationBackground(org.smartregister.chw.core.R.color.family_navigation); + form.setHomeAsUpIndicator(org.smartregister.chw.core.R.mipmap.ic_cross_white); + intent.putExtra(JsonFormConstants.JSON_FORM_KEY.FORM, form); + + startActivityForResult(intent, JsonFormUtils.REQUEST_CODE_GET_JSON); + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { +// process the form + try { + String jsonString = data.getStringExtra(Constants.JSON_FORM_EXTRA.JSON); + assert jsonString != null; + JSONObject form = new JSONObject(jsonString); + String entityId = form.optString(Constants.JSON_FORM_EXTRA.ENTITY_TYPE); + String encounter_type = form.optString(Constants.JSON_FORM_EXTRA.ENCOUNTER_TYPE); + + if (encounter_type.equalsIgnoreCase(CoreConstants.EventType.CHILD_HOME_VISIT)) + ChwScheduleTaskExecutor.getInstance().execute(entityId, CoreConstants.EventType.CHILD_HOME_VISIT, new Date()); + } catch (Exception e) { + Timber.e(e); + } + } + } + + @Override + public List getViewIdentifiers() { + return Collections.singletonList(Utils.metadata().familyRegister.config); + } + + @Override + public void switchToBaseFragment() { + Intent intent = new Intent(this, CoreFamilyRegisterActivity.class); + startActivity(intent); + finish(); + } + + @Override + public CoreOutOfAreaChildRegisterContract.Presenter presenter() { + return (CoreOutOfAreaChildRegisterContract.Presenter) presenter; + } + + @Override + public void openFamilyListView() { + bottomNavigationView.setSelectedItemId(org.smartregister.chw.core.R.id.action_family); + } + + @Override + public void startRegistration() { + startFormActivity(Utils.metadata().familyRegister.formName, null, ""); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildUpdateActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildUpdateActivity.java new file mode 100644 index 0000000000..b6d1239af0 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildUpdateActivity.java @@ -0,0 +1,107 @@ +package org.smartregister.chw.activity; + +import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.getOutOfAreaChildForm; +import static org.smartregister.chw.core.utils.FormUtils.getFormUtils; +import static org.smartregister.chw.util.Constants.Postfixes.OUT_OF_AREA_BIRTH; +import static org.smartregister.chw.util.Constants.UNIQUE_ID; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.anc.AncLibrary; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.core.utils.CoreJsonFormUtils; +import org.smartregister.chw.fragment.OutOfAreaFragment; +import org.smartregister.chw.listener.ChwBottomNavigationListener; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.JsonFormUtilsFlv; +import org.smartregister.chw.util.Utils; +import org.smartregister.commonregistry.CommonPersonObject; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.HashMap; +import java.util.Map; + +import timber.log.Timber; + +public class OutOfAreaChildUpdateActivity extends OutOfAreaChildActivity { + + public CommonPersonObject commonPersonObject; + + public static void registerBottomNavigation( + BottomNavigationHelper bottomNavigationHelper, BottomNavigationView bottomNavigationView, Activity activity + ) { + Utils.setupBottomNavigation(bottomNavigationHelper, bottomNavigationView, new ChwBottomNavigationListener(activity)); + } + + @Override + protected void registerBottomNavigation() { + super.registerBottomNavigation(); + OutOfAreaChildUpdateActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NavigationMenu.getInstance(this, null, null); + ChwApplication.getInstance().notifyAppContextChange(); // initialize the language (bug in translation) + +// action = getIntent().getStringExtra(Constants.ACTIVITY_PAYLOAD.ACTION); + startAncDangerSignsOutcomeForm(); + } + + public void startAncDangerSignsOutcomeForm() { + + try { + JSONObject formJsonObject = getFormUtils().getFormJson(getOutOfAreaChildForm()); + String openSRPId = AncLibrary.getInstance().getUniqueIdRepository().getNextUniqueId().getOpenmrsId(); + Map valueMap = new HashMap<>(); + valueMap.put(UNIQUE_ID, openSRPId.replace("-", "") + OUT_OF_AREA_BIRTH); + CoreJsonFormUtils.populateJsonForm(formJsonObject, valueMap); + JsonFormUtilsFlv.startFormActivity(OutOfAreaChildUpdateActivity.this, formJsonObject, getResources().getString(R.string.out_of_area_form)); + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new OutOfAreaFragment(); + } + + @Override + public void startFormActivity(String s, String s1, Map map) { + // code + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { + try { + String jsonString = data.getStringExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON); + assert jsonString != null; + JSONObject form = new JSONObject(jsonString); + + if (form.getString(JsonFormUtils.ENCOUNTER_TYPE).equals(Constants.EncounterType.OUT_OF_AREA_CHILD_REGISTRATION) + ) { + presenter().saveOutOfAreaForm(jsonString, false); + } + + } catch (Exception e) { + Timber.e(e); + } + + } else { + Utils.launchAndClearOldInstanceOfActivity(this, OutOfAreaChildActivity.class); + } + } + +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildUpdateFormActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildUpdateFormActivity.java new file mode 100644 index 0000000000..91e9cd2396 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaChildUpdateFormActivity.java @@ -0,0 +1,117 @@ +package org.smartregister.chw.activity; + +import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.getOutOfAreaChildForm; +import static org.smartregister.chw.core.utils.CoreReferralUtils.getCommonRepository; +import static org.smartregister.chw.util.Constants.BASE_ENTITY_ID; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.fragment.OutOfAreaFragment; +import org.smartregister.chw.listener.ChwBottomNavigationListener; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.JsonFormUtilsFlv; +import org.smartregister.chw.util.Utils; +import org.smartregister.commonregistry.CommonPersonObject; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.Map; +import java.util.Objects; + +import timber.log.Timber; + +public class OutOfAreaChildUpdateFormActivity extends OutOfAreaChildActivity { + + public CommonPersonObject commonPersonObject; + + public static void registerBottomNavigation( + BottomNavigationHelper bottomNavigationHelper, BottomNavigationView bottomNavigationView, Activity activity + ) { + Utils.setupBottomNavigation(bottomNavigationHelper, bottomNavigationView, new ChwBottomNavigationListener(activity)); + } + + @Override + protected void registerBottomNavigation() { + super.registerBottomNavigation(); + OutOfAreaChildUpdateFormActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NavigationMenu.getInstance(this, null, null); + ChwApplication.getInstance().notifyAppContextChange(); // initialize the language (bug in translation) + + startAncDangerSignsOutcomeForm(); + } + + public void startAncDangerSignsOutcomeForm() { + + try { + JSONObject form = JsonFormUtilsFlv.getAutoPopulatedJsonEditFormString(getOutOfAreaChildForm(), this, getFamilyRegistrationDetails(Objects.requireNonNull(getIntent().getStringExtra(BASE_ENTITY_ID)).toLowerCase()), Constants.EncounterType.OUT_OF_AREA_CHILD_REGISTRATION); + try { + assert form != null; + JsonFormUtilsFlv.startFormActivity(this, form, getResources().getString(R.string.out_of_area_form)); + } catch (Exception e) { + Timber.e(e); + } + + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new OutOfAreaFragment(); + } + + @Override + public void startFormActivity(String s, String s1, Map map) { + // code + } + + private CommonPersonObjectClient getFamilyRegistrationDetails(String entityId) { + final CommonPersonObject personObject = getCommonRepository("ec_out_of_area_child") + .findByBaseEntityId(entityId); + CommonPersonObjectClient commonPersonObjectClient = new CommonPersonObjectClient(personObject.getCaseId(), + personObject.getDetails(), ""); + commonPersonObjectClient.setColumnmaps(personObject.getColumnmaps()); + commonPersonObjectClient.setDetails(personObject.getDetails()); + return commonPersonObjectClient; + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { + try { + String jsonString = data.getStringExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON); + presenter().saveOutOfAreaForm(jsonString, true); + } catch (Exception e) { + Timber.e(e); + } + } else { + Utils.launchAndClearOldInstanceOfActivity(this, OutOfAreaChildActivity.class); + } + } + + @Override + public void openFamilyListView() { + // Do nothing + } + + @Override + public void onPointerCaptureChanged(boolean hasCapture) { + // Do nothing + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathActivity.java new file mode 100644 index 0000000000..0a53aaaadd --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathActivity.java @@ -0,0 +1,157 @@ +package org.smartregister.chw.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import androidx.fragment.app.Fragment; + +import com.vijay.jsonwizard.constants.JsonFormConstants; +import com.vijay.jsonwizard.domain.Form; + +import org.json.JSONObject; +import org.smartregister.AllConstants; +import org.smartregister.chw.anc.util.Constants; +import org.smartregister.chw.contract.CoreOutOfAreaDeathRegisterContract; +import org.smartregister.chw.core.activity.CoreFamilyRegisterActivity; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.fragment.OutOfAreaDeathFragment; +import org.smartregister.chw.model.CoreOutOfAreaDeathRegisterModel; +import org.smartregister.chw.presenter.CoreOutOfAreaDeathRegisterPresenter; +import org.smartregister.chw.schedulers.ChwScheduleTaskExecutor; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.family.util.Utils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.activity.BaseRegisterActivity; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import timber.log.Timber; + +public class OutOfAreaDeathActivity extends BaseRegisterActivity implements CoreOutOfAreaDeathRegisterContract.View { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NavigationMenu.getInstance(this, null, null); + + View view = getWindow().getDecorView().findViewById(android.R.id.content); + presenter().registerFloatingActionButton(view, View.VISIBLE); + } + + @Override + protected void registerBottomNavigation() { + bottomNavigationHelper = new BottomNavigationHelper(); + bottomNavigationView = findViewById(org.smartregister.R.id.bottom_navigation); + FamilyRegisterActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + bottomNavigationView.setVisibility(View.GONE); + } + + @Override + protected void initializePresenter() { + presenter = new CoreOutOfAreaDeathRegisterPresenter(this, new CoreOutOfAreaDeathRegisterModel()); + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new OutOfAreaDeathFragment(); + } + + @Override + protected Fragment[] getOtherFragments() { + return new Fragment[0]; + } + + @Override + protected void onResumption() { + super.onResumption(); + NavigationMenu menu = NavigationMenu.getInstance(this, null, null); + if (menu != null) { + menu.getNavigationAdapter().setSelectedView(CoreConstants.DrawerMenu.OUT_OF_AREA_DEATH); + } + } + + @Override + public void startFormActivity(String s, String s1, Map map) { + // code + } + + @Override + public void startFormActivity(String formName, String entityId, String metaData) { + try { + if (mBaseFragment instanceof OutOfAreaDeathFragment) { + String locationId = Utils.context().allSharedPreferences().getPreference(AllConstants.CURRENT_LOCATION_ID); + presenter().startForm(formName, entityId, metaData, locationId, ""); + } + } catch (Exception e) { + Timber.e(e); + displayToast(getString(org.smartregister.chw.core.R.string.error_unable_to_start_form)); + } + } + + @Override + public void startFormActivity(JSONObject jsonForm) { + Intent intent = new Intent(this, Utils.metadata().familyFormActivity); + intent.putExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON, jsonForm.toString()); + + Form form = new Form(); + form.setName(getString(org.smartregister.chw.core.R.string.add_fam)); + form.setActionBarBackground(org.smartregister.chw.core.R.color.family_actionbar); + form.setNavigationBackground(org.smartregister.chw.core.R.color.family_navigation); + form.setHomeAsUpIndicator(org.smartregister.chw.core.R.mipmap.ic_cross_white); + intent.putExtra(JsonFormConstants.JSON_FORM_KEY.FORM, form); + + startActivityForResult(intent, JsonFormUtils.REQUEST_CODE_GET_JSON); + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { +// process the form + try { + String jsonString = data.getStringExtra(Constants.JSON_FORM_EXTRA.JSON); + assert jsonString != null; + JSONObject form = new JSONObject(jsonString); + String baseEnityId = form.optString(Constants.JSON_FORM_EXTRA.ENTITY_TYPE); + String encounter_type = form.optString(Constants.JSON_FORM_EXTRA.ENCOUNTER_TYPE); + + if (encounter_type.equalsIgnoreCase(CoreConstants.EventType.CHILD_HOME_VISIT)) + ChwScheduleTaskExecutor.getInstance().execute(baseEnityId, CoreConstants.EventType.CHILD_HOME_VISIT, new Date()); + } catch (Exception e) { + Timber.e(e); + } + } + } + + @Override + public List getViewIdentifiers() { + return Collections.singletonList(Utils.metadata().familyRegister.config); + } + + @Override + public void switchToBaseFragment() { + Intent intent = new Intent(this, CoreFamilyRegisterActivity.class); + startActivity(intent); + finish(); + } + + @Override + public CoreOutOfAreaDeathRegisterContract.Presenter presenter() { + return (CoreOutOfAreaDeathRegisterContract.Presenter) presenter; + } + + @Override + public void openFamilyListView() { + bottomNavigationView.setSelectedItemId(org.smartregister.chw.core.R.id.action_family); + } + + @Override + public void startRegistration() { + startFormActivity(Utils.metadata().familyRegister.formName, null, ""); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathUpdateActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathUpdateActivity.java new file mode 100644 index 0000000000..4f64457c26 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathUpdateActivity.java @@ -0,0 +1,104 @@ +package org.smartregister.chw.activity; + +import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.getOutOfAreaDeathForm; +import static org.smartregister.chw.core.utils.FormUtils.getFormUtils; +import static org.smartregister.chw.util.Constants.Postfixes.OUT_OF_AREA_DEATH; +import static org.smartregister.chw.util.CrvsConstants.UNIQUE_ID; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.anc.AncLibrary; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.core.utils.CoreJsonFormUtils; +import org.smartregister.chw.fragment.OutOfAreaDeathFragment; +import org.smartregister.chw.listener.ChwBottomNavigationListener; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.JsonFormUtilsFlv; +import org.smartregister.chw.util.Utils; +import org.smartregister.commonregistry.CommonPersonObject; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.HashMap; +import java.util.Map; + +import timber.log.Timber; + +public class OutOfAreaDeathUpdateActivity extends OutOfAreaDeathActivity { + + public CommonPersonObject commonPersonObject; + + public static void registerBottomNavigation( + BottomNavigationHelper bottomNavigationHelper, BottomNavigationView bottomNavigationView, Activity activity + ) { + Utils.setupBottomNavigation(bottomNavigationHelper, bottomNavigationView, new ChwBottomNavigationListener(activity)); + } + + @Override + protected void registerBottomNavigation() { + super.registerBottomNavigation(); + OutOfAreaDeathUpdateActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NavigationMenu.getInstance(this, null, null); + ChwApplication.getInstance().notifyAppContextChange(); // initialize the language (bug in translation) + + startAncDangerSignsOutcomeForm(); + } + + public void startAncDangerSignsOutcomeForm() { + try { + JSONObject formJsonObject = getFormUtils().getFormJson(getOutOfAreaDeathForm()); + String openSRPId = AncLibrary.getInstance().getUniqueIdRepository().getNextUniqueId().getOpenmrsId(); + Map valueMap = new HashMap<>(); + valueMap.put(UNIQUE_ID, openSRPId.replace("-", "") + OUT_OF_AREA_DEATH); + CoreJsonFormUtils.populateJsonForm(formJsonObject, valueMap); + JsonFormUtilsFlv.startFormActivity(OutOfAreaDeathUpdateActivity.this, formJsonObject, getResources().getString(R.string.out_of_area_form)); + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new OutOfAreaDeathFragment(); + } + + @Override + public void startFormActivity(String s, String s1, Map map) { + // code + } + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { + try { + String jsonString = data.getStringExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON); + assert jsonString != null; + JSONObject form = new JSONObject(jsonString); + + if (form.getString(JsonFormUtils.ENCOUNTER_TYPE).equals(Constants.EncounterType.OUT_OF_AREA_DEATH_REGISTRATION) + ) { + presenter().saveOutOfAreaDeathForm(jsonString, false); + } + + } catch (Exception e) { + Timber.e(e); + } + + } else { + Utils.launchAndClearOldInstanceOfActivity(this, OutOfAreaDeathActivity.class); + } + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathUpdateFormActivity.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathUpdateFormActivity.java new file mode 100644 index 0000000000..0822ca612f --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/OutOfAreaDeathUpdateFormActivity.java @@ -0,0 +1,120 @@ +package org.smartregister.chw.activity; + +import static org.smartregister.chw.core.utils.CoreConstants.JSON_FORM.getOutOfAreaDeathForm; +import static org.smartregister.chw.core.utils.CoreReferralUtils.getCommonRepository; +import static org.smartregister.chw.util.Constants.BASE_ENTITY_ID; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.custom_views.NavigationMenu; +import org.smartregister.chw.fragment.OutOfAreaDeathFragment; +import org.smartregister.chw.listener.ChwBottomNavigationListener; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.JsonFormUtilsFlv; +import org.smartregister.chw.util.Utils; +import org.smartregister.commonregistry.CommonPersonObject; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.helper.BottomNavigationHelper; +import org.smartregister.view.fragment.BaseRegisterFragment; + +import java.util.Map; +import java.util.Objects; + +import timber.log.Timber; + +public class OutOfAreaDeathUpdateFormActivity extends OutOfAreaDeathActivity { + + public CommonPersonObject commonPersonObject; + + public static void registerBottomNavigation( + BottomNavigationHelper bottomNavigationHelper, BottomNavigationView bottomNavigationView, Activity activity + ) { + Utils.setupBottomNavigation(bottomNavigationHelper, bottomNavigationView, new ChwBottomNavigationListener(activity)); + } + + @Override + protected void registerBottomNavigation() { + super.registerBottomNavigation(); + OutOfAreaDeathUpdateFormActivity.registerBottomNavigation(bottomNavigationHelper, bottomNavigationView, this); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NavigationMenu.getInstance(this, null, null); + ChwApplication.getInstance().notifyAppContextChange(); // initialize the language (bug in translation) + startAncDangerSignsOutcomeForm(); + } + + public void startAncDangerSignsOutcomeForm() { + + try { + JSONObject form = JsonFormUtilsFlv.getAutoPopulatedJsonEditFormString(getOutOfAreaDeathForm(), this, getFamilyRegistrationDetails(Objects.requireNonNull(getIntent().getStringExtra(BASE_ENTITY_ID)).toLowerCase()), Constants.EncounterType.OUT_OF_AREA_DEATH_REGISTRATION); + try { + assert form != null; + JsonFormUtilsFlv.startFormActivity(this, form, getResources().getString(R.string.out_of_area_form)); + } catch (Exception e) { + Timber.e(e); + } + + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + protected BaseRegisterFragment getRegisterFragment() { + return new OutOfAreaDeathFragment(); + } + + @Override + public void startFormActivity(String s, String s1, Map map) { + // code + } + + private CommonPersonObjectClient getFamilyRegistrationDetails(String entityId) { + final CommonPersonObject personObject = getCommonRepository("ec_out_of_area_death") + .findByBaseEntityId(entityId); + CommonPersonObjectClient commonPersonObjectClient = new CommonPersonObjectClient(personObject.getCaseId(), + personObject.getDetails(), ""); + commonPersonObjectClient.setColumnmaps(personObject.getColumnmaps()); + commonPersonObjectClient.setDetails(personObject.getDetails()); + return commonPersonObjectClient; + } + + + + @Override + protected void onActivityResultExtended(int requestCode, int resultCode, Intent data) { + if (requestCode == JsonFormUtils.REQUEST_CODE_GET_JSON && resultCode == RESULT_OK) { + try { + String jsonString = data.getStringExtra(org.smartregister.family.util.Constants.JSON_FORM_EXTRA.JSON); + presenter().saveOutOfAreaDeathForm(jsonString, true); + } catch (Exception e) { + Timber.e(e); + } + }else{ + Utils.launchAndClearOldInstanceOfActivity(this, OutOfAreaDeathActivity.class); +// startActivity(new Intent(this, OutOfAreaDeathActivity.class)); +// finish(); + } + } + + @Override + public void openFamilyListView() { + // Do nothing + } + + @Override + public void onPointerCaptureChanged(boolean hasCapture) { + // Do nothing + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/PncMedicalHistoryActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/PncMedicalHistoryActivityFlv.java new file mode 100644 index 0000000000..8ea024e486 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/PncMedicalHistoryActivityFlv.java @@ -0,0 +1,6 @@ +package org.smartregister.chw.activity; + +import org.smartregister.chw.core.activity.DefaultPncMedicalHistoryActivityFlv; + +public class PncMedicalHistoryActivityFlv extends DefaultPncMedicalHistoryActivityFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/PncMemberProfileActivityFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/PncMemberProfileActivityFlv.java new file mode 100644 index 0000000000..c2e0c51967 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/activity/PncMemberProfileActivityFlv.java @@ -0,0 +1,5 @@ +package org.smartregister.chw.activity; + +public class PncMemberProfileActivityFlv extends DefaultPncMemberProfileActivityFlv { + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/application/ChwApplicationFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/application/ChwApplicationFlv.java new file mode 100644 index 0000000000..0bdbe3e7cf --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/application/ChwApplicationFlv.java @@ -0,0 +1,5 @@ +package org.smartregister.chw.application; + +public class ChwApplicationFlv extends DefaultChwApplicationFlv { + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/contract/CoreOutOfAreaChildRegisterContract.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/contract/CoreOutOfAreaChildRegisterContract.java new file mode 100644 index 0000000000..011186ca96 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/contract/CoreOutOfAreaChildRegisterContract.java @@ -0,0 +1,81 @@ +package org.smartregister.chw.contract; + +import android.content.Context; +import android.util.Pair; + +import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONObject; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.family.domain.FamilyEventClient; +import org.smartregister.view.contract.BaseRegisterContract; + +import java.util.List; + +public interface CoreOutOfAreaChildRegisterContract { + + interface View extends BaseRegisterContract.View { + CoreOutOfAreaChildRegisterContract.Presenter presenter(); + + void openFamilyListView(); + } + + interface Presenter extends BaseRegisterContract.Presenter { + + void saveLanguage(String language); + + void startForm(String formName, String entityId, String metadata, String currentLocationId, String familyID) throws Exception; + + void saveOutOfAreaForm(String jsonString, boolean isEditMode); + + void closeFamilyRecord(String jsonString); + + void addOutOfAreaChild(Class activity); + + void registerFloatingActionButton(android.view.View view, int visibility); + + } + + interface Model { + + void registerViewConfigurations(List viewIdentifiers); + + void unregisterViewConfiguration(List viewIdentifiers); + + void saveLanguage(String language); + + String getLocationId(String locationName); + + Pair processRegistration(String jsonString); + + JSONObject getFormAsJson(String formName, String entityId, + String currentLocationId, String familyId) throws Exception; + + String getInitials(); + + } + + interface Interactor { + + void onDestroy(boolean isChangingConfiguration); + + void getNextUniqueId(Triple triple, CoreOutOfAreaChildRegisterContract.InteractorCallBack callBack, String familyID); + + void saveRegistration(final Pair pair, final String jsonString, final boolean isEditMode, final CoreOutOfAreaChildRegisterContract.InteractorCallBack callBack); + + void removeChildFromRegister(String closeFormJsonString, String providerId); + + void openActivityOnFloatingButtonClick(Context context, Class activity); + + } + + interface InteractorCallBack { + + void onNoUniqueId(); + + void onUniqueIdFetched(Triple triple, String entityId, String familyId); + + void onRegistrationSaved(boolean editMode, boolean isSaved, FamilyEventClient familyEventClient); + + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/contract/CoreOutOfAreaDeathRegisterContract.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/contract/CoreOutOfAreaDeathRegisterContract.java new file mode 100644 index 0000000000..3d24663541 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/contract/CoreOutOfAreaDeathRegisterContract.java @@ -0,0 +1,81 @@ +package org.smartregister.chw.contract; + +import android.content.Context; +import android.util.Pair; + +import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONObject; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.family.domain.FamilyEventClient; +import org.smartregister.view.contract.BaseRegisterContract; + +import java.util.List; + +public interface CoreOutOfAreaDeathRegisterContract { + + interface View extends BaseRegisterContract.View { + CoreOutOfAreaDeathRegisterContract.Presenter presenter(); + + void openFamilyListView(); + } + + interface Presenter extends BaseRegisterContract.Presenter { + + void saveLanguage(String language); + + void startForm(String formName, String entityId, String metadata, String currentLocationId, String familyID) throws Exception; + + void saveOutOfAreaDeathForm(String jsonString, boolean isEditMode); + + void closeFamilyRecord(String jsonString); + + void addOutOfAreaChild(Class activity); + + void registerFloatingActionButton(android.view.View view, int visibility); + + } + + interface Model { + + void registerViewConfigurations(List viewIdentifiers); + + void unregisterViewConfiguration(List viewIdentifiers); + + void saveLanguage(String language); + + String getLocationId(String locationName); + + Pair processRegistration(String jsonString); + + JSONObject getFormAsJson(String formName, String entityId, + String currentLocationId, String familyId) throws Exception; + + String getInitials(); + + } + + interface Interactor { + + void onDestroy(boolean isChangingConfiguration); + + void getNextUniqueId(Triple triple, CoreOutOfAreaDeathRegisterContract.InteractorCallBack callBack, String familyID); + + void saveRegistration(final Pair pair, final String jsonString, final boolean isEditMode, final CoreOutOfAreaDeathRegisterContract.InteractorCallBack callBack); + + void removeChildFromRegister(String closeFormJsonString, String providerId); + + void openActivityOnFloatingButtonClick(Context context, Class activity); + + } + + interface InteractorCallBack { + + void onNoUniqueId(); + + void onUniqueIdFetched(Triple triple, String entityId, String familyId); + + void onRegistrationSaved(boolean editMode, boolean isSaved, FamilyEventClient familyEventClient); + + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/custom_view/FamilyMemberFloatingMenuFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/custom_view/FamilyMemberFloatingMenuFlv.java new file mode 100644 index 0000000000..141c3572f8 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/custom_view/FamilyMemberFloatingMenuFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.custom_view; + +public class FamilyMemberFloatingMenuFlv extends DefaultFamilyMemberFloatingMenuFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/custom_view/NavigationMenuFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/custom_view/NavigationMenuFlv.java new file mode 100644 index 0000000000..c33a58fa39 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/custom_view/NavigationMenuFlv.java @@ -0,0 +1,8 @@ +package org.smartregister.chw.custom_view; + +public class NavigationMenuFlv extends DefaultNavigationMenuFlv { + @Override + public boolean hasSyncStatusProgressBar() { + return true; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/dao/ChwPNCDaoFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/dao/ChwPNCDaoFlv.java new file mode 100644 index 0000000000..afa54d7fb2 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/dao/ChwPNCDaoFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.dao; + +public class ChwPNCDaoFlv extends DefaultChwPNCDaoFlv{ +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/BaseHomeVisitImmunizationFragmentFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/BaseHomeVisitImmunizationFragmentFlv.java new file mode 100644 index 0000000000..a4e5ffff18 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/BaseHomeVisitImmunizationFragmentFlv.java @@ -0,0 +1,35 @@ +package org.smartregister.chw.fragment; + +import org.smartregister.chw.anc.contract.BaseAncHomeVisitContract; +import org.smartregister.chw.anc.domain.VaccineDisplay; +import org.smartregister.chw.anc.domain.VisitDetail; +import org.smartregister.chw.anc.util.JsonFormUtils; +import org.smartregister.chw.anc.util.NCUtils; + +import java.util.List; +import java.util.Map; + +public class BaseHomeVisitImmunizationFragmentFlv extends DefaultBaseHomeVisitImmunizationFragment { + + public static BaseHomeVisitImmunizationFragmentFlv getInstance(final BaseAncHomeVisitContract.VisitView view, String baseEntityID, Map> details, List vaccineDisplays) { + return getInstance(view, baseEntityID, details, vaccineDisplays, true); + } + + public static BaseHomeVisitImmunizationFragmentFlv getInstance(final BaseAncHomeVisitContract.VisitView view, String baseEntityID, Map> details, List vaccineDisplays, boolean defaultChecked) { + BaseHomeVisitImmunizationFragmentFlv fragment = new BaseHomeVisitImmunizationFragmentFlv(); + fragment.visitView = view; + fragment.baseEntityID = baseEntityID; + fragment.details = details; + fragment.vaccinesDefaultChecked = defaultChecked; + for (VaccineDisplay vaccineDisplay : vaccineDisplays) { + fragment.vaccineDisplays.put(vaccineDisplay.getVaccineWrapper().getName(), vaccineDisplay); + } + + if (details != null && details.size() > 0) { + fragment.jsonObject = NCUtils.getVisitJSONFromVisitDetails(view.getMyContext(), baseEntityID, details, vaccineDisplays); + JsonFormUtils.populateForm(fragment.jsonObject, details); + } + + return fragment; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/BirthCertificationRegisterFragment.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/BirthCertificationRegisterFragment.java new file mode 100644 index 0000000000..2a659ff753 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/BirthCertificationRegisterFragment.java @@ -0,0 +1,87 @@ +package org.smartregister.chw.fragment; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT; +import static org.smartregister.chw.core.utils.CoreConstants.ACTION.START_BIRTH_CERTIFICATION_UPDATE; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_NOTIFICATION; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_REGISTRATION; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_REG_TYPE; +import static org.smartregister.chw.util.ChildDBConstants.KEY.INFORMANT_REASON; +import static org.smartregister.chw.util.ChildDBConstants.KEY.SYSTEM_BIRTH_NOTIFICATION; +import static org.smartregister.chw.util.CrvsConstants.BASE_ENTITY_ID; +import static org.smartregister.chw.util.CrvsConstants.BIRTH_CERTIFICATE_ISSUE_DATE; +import static org.smartregister.chw.util.CrvsConstants.DOB; + +import android.content.Intent; + +import org.smartregister.chw.R; +import org.smartregister.chw.activity.BirthCertificationRegisterActivity; +import org.smartregister.chw.core.fragment.CoreCertificationRegisterFragment; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.BirthCertificationRegisterFragmentModel; +import org.smartregister.chw.presenter.BirthCertificationRegisterFragmentPresenter; +import org.smartregister.chw.provider.BirthCertificationRegisterProvider; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.configurableviews.model.View; +import org.smartregister.cursoradapter.RecyclerViewPaginatedAdapter; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.Utils; +import org.smartregister.view.activity.BaseRegisterActivity; + +import java.util.Set; + +public class BirthCertificationRegisterFragment extends CoreCertificationRegisterFragment { + + + @Override + public void initializeAdapter(Set visibleColumns) { + BirthCertificationRegisterProvider provider = new BirthCertificationRegisterProvider(getActivity(), visibleColumns, registerActionHandler, paginationViewHandler); + clientAdapter = new RecyclerViewPaginatedAdapter(null, provider, context().commonrepository(this.tablename)); + clientAdapter.setCurrentlimit(20); + clientsView.setAdapter(clientAdapter); + } + + @Override + public void setupViews(android.view.View view) { + super.setupViews(view); + dueOnlyFilter = view.findViewById(org.smartregister.chw.core.R.id.due_only_text_view); + dueOnlyFilter.setText(getResources().getString(R.string.birth_summary_toggle)); + } + + @Override + protected void initializePresenter() { + if (getActivity() == null) { + return; + } + String viewConfigurationIdentifier = ((BaseRegisterActivity) getActivity()).getViewIdentifiers().get(0); + presenter = new BirthCertificationRegisterFragmentPresenter(this, new BirthCertificationRegisterFragmentModel(), viewConfigurationIdentifier); + } + + @Override + protected int getToolBarTitle() { + return R.string.birth_certification; + } + + @Override + public Intent getUpdateIntent(CommonPersonObjectClient client) { + if (getActivity() == null || client == null) + return null; + + Intent intent = new Intent(getActivity(), BirthCertificationRegisterActivity.class); + intent.putExtra(CoreConstants.ACTIVITY_PAYLOAD.ACTION, START_BIRTH_CERTIFICATION_UPDATE); + intent.putExtra(BASE_ENTITY_ID, Utils.getValue(client.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false)); + intent.putExtra(CLIENT_TYPE, Utils.getValue(client.getColumnmaps(), CLIENT_TYPE, false)); + intent.putExtra(BIRTH_CERT, Utils.getValue(client.getColumnmaps(), BIRTH_CERT, true)); + intent.putExtra(BIRTH_REGISTRATION, Utils.getValue(client.getColumnmaps(), BIRTH_REGISTRATION, true)); + intent.putExtra(BIRTH_NOTIFICATION, Utils.getValue(client.getColumnmaps(), ChildDBConstants.KEY.BIRTH_CERT_NOTIFIICATION, true)); + intent.putExtra(BIRTH_CERTIFICATE_ISSUE_DATE, Utils.getValue(client.getColumnmaps(), ChildDBConstants.KEY.BIRTH_CERT_ISSUE_DATE, true)); + intent.putExtra(ChildDBConstants.KEY.BIRTH_CERT_NUMBER, Utils.getValue(client.getColumnmaps(), ChildDBConstants.KEY.BIRTH_CERT_NUMBER, true)); + intent.putExtra(SYSTEM_BIRTH_NOTIFICATION, Utils.getValue(client.getColumnmaps(), SYSTEM_BIRTH_NOTIFICATION, true)); + intent.putExtra(BIRTH_REG_TYPE, Utils.getValue(client.getColumnmaps(), BIRTH_REG_TYPE, true)); + intent.putExtra(INFORMANT_REASON, Utils.getValue(client.getColumnmaps(), INFORMANT_REASON, true)); + intent.putExtra(DOB, Utils.getValue(client.getColumnmaps(), DBConstants.KEY.DOB, true)); + + return intent; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/DeathCertificationRegisterFragment.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/DeathCertificationRegisterFragment.java new file mode 100644 index 0000000000..e765ba7c86 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/DeathCertificationRegisterFragment.java @@ -0,0 +1,177 @@ +package org.smartregister.chw.fragment; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.core.utils.CoreConstants.ACTION.START_DEATH_CERTIFICATION_UPDATE; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.DEATH_CERTIFICATE_ISSUE_DATE; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.DEATH_CERTIFICATE_NUMBER; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.DEATH_NOTIFICATION_DONE; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.RECEIVED_DEATH_CERTIFICATE; +import static org.smartregister.chw.util.Constants.BASE_ENTITY_ID; +import static org.smartregister.chw.util.Constants.INFORMANT_ADDRESS; +import static org.smartregister.chw.util.Constants.INFORMANT_NAME; +import static org.smartregister.chw.util.Constants.INFORMANT_PHONE; +import static org.smartregister.chw.util.Constants.INFORMANT_RELATIONSHIP; +import static org.smartregister.chw.util.Constants.OFFICIAL_ADDRESS; +import static org.smartregister.chw.util.Constants.OFFICIAL_NAME; +import static org.smartregister.chw.util.Constants.OFFICIAL_NUMBER; +import static org.smartregister.chw.util.Constants.OFFICIAL_POSITION; +import static org.smartregister.chw.util.CrvsConstants.DOB; +import static org.smartregister.chw.util.CrvsConstants.OFFICIAL_ID; + +import android.content.Intent; +import android.database.Cursor; +import android.database.SQLException; +import android.os.Bundle; + +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; + +import org.jetbrains.annotations.NotNull; +import org.smartregister.chw.R; +import org.smartregister.chw.activity.DeathCertificationRegisterActivity; +import org.smartregister.chw.core.fragment.CoreCertificationRegisterFragment; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.DeathCertificationRegisterFragmentModel; +import org.smartregister.chw.presenter.DeathCertificationRegisterFragmentPresenter; +import org.smartregister.chw.provider.DeathCertificationRegisterProvider; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.configurableviews.model.View; +import org.smartregister.cursoradapter.RecyclerViewPaginatedAdapter; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.Utils; +import org.smartregister.view.activity.BaseRegisterActivity; + +import java.util.Set; + +import timber.log.Timber; + +public class DeathCertificationRegisterFragment extends CoreCertificationRegisterFragment { + + @Override + public void initializeAdapter(Set visibleColumns) { + DeathCertificationRegisterProvider registerProvider = new DeathCertificationRegisterProvider(getActivity(), visibleColumns, registerActionHandler, paginationViewHandler); + clientAdapter = new RecyclerViewPaginatedAdapter(null, registerProvider, context().commonrepository(this.tablename)); + clientAdapter.setCurrentlimit(20); + clientsView.setAdapter(clientAdapter); + } + + @Override + public void setupViews(android.view.View view) { + super.setupViews(view); + dueOnlyFilter = view.findViewById(org.smartregister.chw.core.R.id.due_only_text_view); + dueOnlyFilter.setText(getResources().getString(R.string.death_summary_toggle)); + } + + @Override + protected void initializePresenter() { + if (getActivity() == null) { + return; + } + String viewConfigurationIdentifier = ((BaseRegisterActivity) getActivity()).getViewIdentifiers().get(0); + presenter = new DeathCertificationRegisterFragmentPresenter(this, new DeathCertificationRegisterFragmentModel(), viewConfigurationIdentifier); + } + + @Override + protected int getToolBarTitle() { + return R.string.death_certification; + } + + @Override + public Intent getUpdateIntent(CommonPersonObjectClient client) { + if (getActivity() == null || client == null) + return null; + + Intent intent = new Intent(getActivity(), DeathCertificationRegisterActivity.class); + intent.putExtra(CoreConstants.ACTIVITY_PAYLOAD.ACTION, START_DEATH_CERTIFICATION_UPDATE); + intent.putExtra(DOB, Utils.getValue(client.getColumnmaps(), DBConstants.KEY.DOB, true)); + intent.putExtra(BASE_ENTITY_ID, Utils.getValue(client.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false)); + intent.putExtra(CLIENT_TYPE, Utils.getValue(client.getColumnmaps(), CLIENT_TYPE, false)); + intent.putExtra(RECEIVED_DEATH_CERTIFICATE, Utils.getValue(client.getColumnmaps(), RECEIVED_DEATH_CERTIFICATE, false)); + intent.putExtra(DEATH_NOTIFICATION_DONE, Utils.getValue(client.getColumnmaps(), DEATH_NOTIFICATION_DONE, false)); + intent.putExtra(DEATH_CERTIFICATE_ISSUE_DATE, Utils.getValue(client.getColumnmaps(), DEATH_CERTIFICATE_ISSUE_DATE, false)); + intent.putExtra(DEATH_CERTIFICATE_NUMBER, Utils.getValue(client.getColumnmaps(), DEATH_CERTIFICATE_NUMBER, false)); + intent.putExtra(OFFICIAL_ID, Utils.getValue(client.getColumnmaps(), OFFICIAL_ID, false)); + intent.putExtra(INFORMANT_NAME, Utils.getValue(client.getColumnmaps(), INFORMANT_NAME, false)); + intent.putExtra(INFORMANT_RELATIONSHIP, Utils.getValue(client.getColumnmaps(), INFORMANT_RELATIONSHIP, false)); + intent.putExtra(INFORMANT_ADDRESS, Utils.getValue(client.getColumnmaps(), INFORMANT_ADDRESS, false)); + intent.putExtra(INFORMANT_PHONE, Utils.getValue(client.getColumnmaps(), INFORMANT_PHONE, false)); + intent.putExtra(OFFICIAL_NAME, Utils.getValue(client.getColumnmaps(), OFFICIAL_NAME, false)); + intent.putExtra(OFFICIAL_ID, Utils.getValue(client.getColumnmaps(), OFFICIAL_ID, false)); + intent.putExtra(OFFICIAL_POSITION, Utils.getValue(client.getColumnmaps(), OFFICIAL_POSITION, false)); + intent.putExtra(OFFICIAL_ADDRESS, Utils.getValue(client.getColumnmaps(), OFFICIAL_ADDRESS, false)); + intent.putExtra(OFFICIAL_NUMBER, Utils.getValue(client.getColumnmaps(), OFFICIAL_NUMBER, false)); + + return intent; + } + + @NotNull + @Override + public Loader onCreateLoader(int id, Bundle args) { + if (id == LOADER_ID) {// Returns a new CursorLoader + return new CursorLoader(requireActivity()) { + @Override + public Cursor loadInBackground() { + // Count query + final String COUNT = "count_execute"; + if (args != null && args.getBoolean(COUNT)) { + countExecute(); + } + String query = filterAndSortQuery(); + return commonRepository().rawCustomQueryForAdapter(query); + } + }; + }// An invalid id was passed in + return null; + } + + @Override + public void countExecute() { + Cursor c = null; + try { + c = commonRepository().rawCustomQueryForAdapter(getCountSelect()); + c.moveToFirst(); + clientAdapter.setTotalcount(c.getInt(0)); + + clientAdapter.setCurrentlimit(20); + clientAdapter.setCurrentoffset(0); + } catch (Exception e) { + Timber.e(e); + } finally { + if (c != null) { + c.close(); + } + } + } + + private String getCountSelect() { + String query = ""; + + try { + query = ((DeathCertificationRegisterFragmentPresenter) presenter()). + getCustomSelectString(getMainCondition(), filters, presenter().getOutOfCatchmentSortQueries(), dueFilterActive); + } catch (SQLException e) { + Timber.e(e); + } + + return "SELECT COUNT(*) FROM (" + query + ") AS cnt;"; + } + + private String filterAndSortQuery() { + + String query = ""; + + try { + query = ((DeathCertificationRegisterFragmentPresenter) presenter()). + getCustomSelectString(getMainCondition(), filters, presenter().getOutOfCatchmentSortQueries(), dueFilterActive); + SmartRegisterQueryBuilder queryBuilder = new SmartRegisterQueryBuilder(query); + return queryBuilder.addlimitandOffset(queryBuilder.toString(), clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()); + + } catch (SQLException e) { + Timber.e(e); + } + + return query; + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaDeathFragment.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaDeathFragment.java new file mode 100644 index 0000000000..a02b997145 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaDeathFragment.java @@ -0,0 +1,344 @@ +package org.smartregister.chw.fragment; + + +import static org.smartregister.chw.util.Constants.BASE_ENTITY_ID; + +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; + +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.smartregister.chw.R; +import org.smartregister.chw.activity.OutOfAreaDeathActivity; +import org.smartregister.chw.activity.OutOfAreaDeathUpdateFormActivity; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.fragment.BaseChwRegisterFragment; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.CoreOutOfAreaDeathFragmentModel; +import org.smartregister.chw.presenter.OutOfAreaDeathFragmentPresenter; +import org.smartregister.chw.provider.OutOfAreaDeathProvider; +import org.smartregister.chw.util.Constants; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.cursoradapter.RecyclerViewPaginatedAdapter; +import org.smartregister.domain.FetchStatus; +import org.smartregister.family.fragment.NoMatchDialogFragment; +import org.smartregister.family.util.DBConstants; +import org.smartregister.receiver.SyncStatusBroadcastReceiver; +import org.smartregister.util.Utils; +import org.smartregister.view.activity.BaseRegisterActivity; + +import java.util.HashMap; +import java.util.Set; + +import timber.log.Timber; + +public class OutOfAreaDeathFragment extends BaseChwRegisterFragment implements CoreChildRegisterFragmentContract.View { + + public static final String CLICK_VIEW_NORMAL = "click_view_normal"; + private static final String DUE_FILTER_TAG = "PRESSED"; + protected View view; + protected View dueOnlyLayout; + protected boolean dueFilterActive = false; + + @Override + protected void initializePresenter() { + if (getActivity() == null) { + return; + } + String viewConfigurationIdentifier = ((BaseRegisterActivity) getActivity()).getViewIdentifiers().get(0); + presenter = new OutOfAreaDeathFragmentPresenter(this, new CoreOutOfAreaDeathFragmentModel(), viewConfigurationIdentifier); + } + + @Override + public void setUniqueID(String s) { + if (getSearchView() != null) { + getSearchView().setText(s); + } + } + + @Override + public void setAdvancedSearchFormData(HashMap hashMap) { + //// TODO: 15/08/19 + } + + @Override + protected void onResumption() { + + if (dueFilterActive && dueOnlyLayout != null) { + dueFilter(dueOnlyLayout); + } else { + super.onResumption(); + } + } + + @Override + protected String getMainCondition() { + return presenter().getMainCondition(); + } + + @Override + protected String getDefaultSortQuery() { + return presenter().getDefaultSortQuery(); + } + + @Override + protected void startRegistration() { + ((OutOfAreaDeathActivity) requireActivity()).startFormActivity(CoreConstants.JSON_FORM.getChildRegister(), null, ""); + } + + @Override + protected void onViewClicked(View view) { + if (getActivity() == null) { + return; + } + + if (view.getTag() != null && view.getTag(org.smartregister.chw.core.R.id.VIEW_ID) == CLICK_VIEW_NORMAL) { + if (view.getTag() instanceof CommonPersonObjectClient) { + goToChildDetailActivity((CommonPersonObjectClient) view.getTag()); + } + } else if (view.getId() == org.smartregister.chw.core.R.id.due_only_layout) { + toggleFilterSelection(view); + } + } + + @Override + public void onSyncInProgress(FetchStatus fetchStatus) { + if (!SyncStatusBroadcastReceiver.getInstance().isSyncing() && (FetchStatus.fetched.equals(fetchStatus) || FetchStatus.nothingFetched.equals(fetchStatus)) && dueFilterActive && dueOnlyLayout != null) { + dueFilter(dueOnlyLayout); + Utils.showShortToast(getActivity(), getString(org.smartregister.chw.core.R.string.sync_complete)); + refreshSyncProgressSpinner(); + } else { + super.onSyncInProgress(fetchStatus); + } + } + + @Override + public void onSyncComplete(FetchStatus fetchStatus) { + if (!SyncStatusBroadcastReceiver.getInstance().isSyncing() && (FetchStatus.fetched.equals(fetchStatus) || FetchStatus.nothingFetched.equals(fetchStatus)) && (dueFilterActive && dueOnlyLayout != null)) { + dueFilter(dueOnlyLayout); + Utils.showShortToast(getActivity(), getString(org.smartregister.chw.core.R.string.sync_complete)); + refreshSyncProgressSpinner(); + } else { + super.onSyncComplete(fetchStatus); + } + + if (syncProgressBar != null) { + syncProgressBar.setVisibility(View.GONE); + } + if (syncButton != null) { + syncButton.setVisibility(View.GONE); + } + } + + @Override + protected void refreshSyncProgressSpinner() { + super.refreshSyncProgressSpinner(); + if (syncButton != null) { + syncButton.setVisibility(View.GONE); + } + } + + public void goToChildDetailActivity(CommonPersonObjectClient patient) { + String entityId = org.smartregister.family.util.Utils.getValue(patient.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + Intent intent = new Intent(getActivity(), OutOfAreaDeathUpdateFormActivity.class); + intent.putExtra(Constants.ACTIVITY_PAYLOAD.ACTION, Constants.ACTION.START_REGISTRATION); + intent.putExtra(BASE_ENTITY_ID, entityId); + startActivity(intent); + } + + public void toggleFilterSelection(View dueOnlyLayout) { + if (dueOnlyLayout != null) { + if (dueOnlyLayout.getTag() == null) { + dueFilterActive = true; + dueFilter(dueOnlyLayout); + } else if (dueOnlyLayout.getTag().toString().equals(DUE_FILTER_TAG)) { + dueFilterActive = false; + normalFilter(dueOnlyLayout); + } + } + } + + private void normalFilter(View dueOnlyLayout) { + filter(searchText(), "", presenter().getMainCondition()); + dueOnlyLayout.setTag(null); + switchViews(dueOnlyLayout, false); + } + + protected String getDueFilterCondition() { + return presenter().getDueFilterCondition(); + } + + private void dueFilter(View dueOnlyLayout) { + filter(searchText(), "", getDueFilterCondition()); + dueOnlyLayout.setTag(DUE_FILTER_TAG); + switchViews(dueOnlyLayout, true); + } + + protected void filterAndSortExecute() { + filterandSortExecute(countBundle()); + } + + protected void filter(String filterString, String joinTableString, String mainConditionString) { + filters = filterString; + joinTable = joinTableString; + mainCondition = mainConditionString; + filterAndSortExecute(); + } + + private String searchText() { + return (getSearchView() == null) ? "" : getSearchView().getText().toString(); + } + + protected TextView getDueOnlyTextView(View dueOnlyLayout) { + return dueOnlyLayout.findViewById(org.smartregister.chw.core.R.id.due_only_text_view); + } + + private void switchViews(View dueOnlyLayout, boolean isPress) { + if (isPress) { + getDueOnlyTextView(dueOnlyLayout).setCompoundDrawablesWithIntrinsicBounds(0, 0, org.smartregister.chw.core.R.drawable.ic_due_filter_on, 0); + } else { + getDueOnlyTextView(dueOnlyLayout).setCompoundDrawablesWithIntrinsicBounds(0, 0, org.smartregister.chw.core.R.drawable.ic_due_filter_off, 0); + + } + } + + @Override + public void initializeAdapter(Set visibleColumns) { + OutOfAreaDeathProvider deadClientsProvider = new OutOfAreaDeathProvider(requireActivity(), commonRepository(), visibleColumns, registerActionHandler, paginationViewHandler); + clientAdapter = new RecyclerViewPaginatedAdapter(null, deadClientsProvider, context().commonrepository(this.tablename)); + clientAdapter.setCurrentlimit(20); + clientsView.setAdapter(clientAdapter); + } + + @Override + public CoreChildRegisterFragmentContract.Presenter presenter() { + return (CoreChildRegisterFragmentContract.Presenter) presenter; + } + + @Override + public void setupViews(View view) { + super.setupViews(view); + + if (ChwApplication.getApplicationFlavor().hasDefaultDueFilterForChildClient()) { + View dueOnlyLayout = view.findViewById(org.smartregister.chw.core.R.id.due_only_layout); + dueOnlyLayout.setVisibility(View.VISIBLE); + dueOnlyLayout.setOnClickListener(registerActionHandler); + dueOnlyLayout.setTag(null); + toggleFilterSelection(dueOnlyLayout); + } + } + + @Override + protected int getToolBarTitle() { + return R.string.out_of_area_death; + } + + @Override + public void showNotFoundPopup(String uniqueId) { + if (getActivity() == null) { + return; + } + NoMatchDialogFragment.launchDialog((BaseRegisterActivity) getActivity(), DIALOG_TAG, uniqueId); + } + + @NotNull + @Override + public Loader onCreateLoader(int id, Bundle args) { + if (id == LOADER_ID) {// Returns a new CursorLoader + return new CursorLoader(requireActivity()) { + @Override + public Cursor loadInBackground() { + // Count query + String query = filterandSortQuery(); + return commonRepository().rawCustomQueryForAdapter(query); + } + }; + }// An invalid id was passed in + return null; + } + + + @Override + public void countExecute() { + try (Cursor c = commonRepository().rawCustomQueryForAdapter(getCountSelect())) { + c.moveToFirst(); + clientAdapter.setTotalcount(c.getInt(0)); + + clientAdapter.setCurrentlimit(20); + clientAdapter.setCurrentoffset(0); + } catch (Exception e) { + Timber.e(e); + } + } + + public String getCountSelect() { + + String query = countSelect; + try { + if (StringUtils.isNoneBlank(filters)){ + query = "SELECT count(*) from ec_out_of_area_death"; + }else if (StringUtils.isBlank(filters) && !dueFilterActive){ + query = "SELECT count(*) from ec_out_of_area_death"; + } + + if (dueFilterActive){ + query = "SELECT count(*) from ec_out_of_area_death"; + } + + } catch (Exception e) { + Timber.e(e); + } + + return query; + } + + public String filterandSortQuery() { + String query = ""; + try { + if (StringUtils.isNoneBlank(filters)) { +// query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()); + query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset(), filters); + } else if (StringUtils.isBlank(filters) && !dueFilterActive){ + query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()); + } + if (dueFilterActive){ + query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()); +// query = customDeathDueFilterQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset(), ((CoreDeadClientsFragmentPresenter) presenter()).getDueCondition()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return query; + } + + public String customDeathQuery(int limit, int offset) { + return "Select ec_out_of_area_death.id as _id, ec_out_of_area_death.relationalid, ec_out_of_area_death.last_interacted_with, " + + "ec_out_of_area_death.base_entity_id , ec_out_of_area_death.name, ec_out_of_area_death.national_id, " + + "ec_out_of_area_death.dob, ec_out_of_area_death.dob_unknown, ec_out_of_area_death.age_calculated, " + + "ec_out_of_area_death.remove_reason, ec_out_of_area_death.death_place, " + + "ec_out_of_area_death.nationality, ec_out_of_area_death.marital_status, " + + "ec_out_of_area_death.still_born_death " + + "from ec_out_of_area_death ORDER BY ec_out_of_area_death.last_interacted_with DESC LIMIT " + offset + "," + limit; + } + + public String customDeathQuery(int limit, int offset, String filter) { + return "Select ec_out_of_area_death.id as _id, ec_out_of_area_death.relationalid, ec_out_of_area_death.last_interacted_with, " + + "ec_out_of_area_death.base_entity_id , ec_out_of_area_death.name, ec_out_of_area_death.national_id, " + + "ec_out_of_area_death.dob, ec_out_of_area_death.dob_unknown, ec_out_of_area_death.age_calculated, " + + "ec_out_of_area_death.remove_reason, ec_out_of_area_death.death_place, " + + "ec_out_of_area_death.nationality, ec_out_of_area_death.marital_status, " + + "ec_out_of_area_death.still_born_death " + + "from ec_out_of_area_death "+getFilters(filter)+" ORDER BY ec_out_of_area_death.last_interacted_with DESC LIMIT " + offset + "," + limit; + } + + public String getFilters(String filter) { + return "where ( ec_out_of_area_death.name like '%" + filter + "%' or ec_out_of_area_death.unique_id like '%" + filter + "%')"; + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java new file mode 100644 index 0000000000..fee1dc56b9 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/fragment/OutOfAreaFragment.java @@ -0,0 +1,333 @@ +package org.smartregister.chw.fragment; + +import static org.smartregister.chw.util.Constants.BASE_ENTITY_ID; + +import android.content.Intent; +import android.database.Cursor; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; +import androidx.loader.content.CursorLoader; +import androidx.loader.content.Loader; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.smartregister.chw.R; +import org.smartregister.chw.activity.OutOfAreaChildActivity; +import org.smartregister.chw.activity.OutOfAreaChildUpdateFormActivity; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.fragment.BaseChwRegisterFragment; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.CoreOutOfAreaFragmentModel; +import org.smartregister.chw.presenter.OutOfAreaChildFragmentPresenter; +import org.smartregister.chw.provider.OutOfAreaProvider; +import org.smartregister.chw.util.Constants; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.cursoradapter.RecyclerViewPaginatedAdapter; +import org.smartregister.domain.FetchStatus; +import org.smartregister.family.fragment.NoMatchDialogFragment; +import org.smartregister.family.util.DBConstants; +import org.smartregister.receiver.SyncStatusBroadcastReceiver; +import org.smartregister.util.Utils; +import org.smartregister.view.activity.BaseRegisterActivity; +import java.util.HashMap; +import java.util.Set; +import timber.log.Timber; + +public class OutOfAreaFragment extends BaseChwRegisterFragment implements CoreChildRegisterFragmentContract.View { + + public static final String CLICK_VIEW_NORMAL = "click_view_normal"; + private static final String DUE_FILTER_TAG = "PRESSED"; + protected View view; + protected View dueOnlyLayout; + protected boolean dueFilterActive = false; + + @Override + protected void initializePresenter() { + if (getActivity() == null) { + return; + } + String viewConfigurationIdentifier = ((BaseRegisterActivity) getActivity()).getViewIdentifiers().get(0); + presenter = new OutOfAreaChildFragmentPresenter(this, new CoreOutOfAreaFragmentModel(), viewConfigurationIdentifier); + } + + @Override + public void setUniqueID(String s) { + if (getSearchView() != null) { + getSearchView().setText(s); + } + } + + @Override + public void setAdvancedSearchFormData(HashMap hashMap) { + //// TODO: 15/08/19 + } + + @Override + protected void onResumption() { + if (dueFilterActive && dueOnlyLayout != null) { + dueFilter(dueOnlyLayout); + } else { + super.onResumption(); + } + } + + @Override + protected String getMainCondition() { + return presenter().getMainCondition(); + } + + @Override + protected String getDefaultSortQuery() { + return presenter().getDefaultSortQuery(); + } + + @Override + protected void startRegistration() { + ((OutOfAreaChildActivity) requireActivity()).startFormActivity(CoreConstants.JSON_FORM.getChildRegister(), null, ""); + } + + @Override + protected void onViewClicked(View view) { + if (getActivity() == null) { + return; + } + + if (view.getTag() != null && view.getTag(org.smartregister.chw.core.R.id.VIEW_ID) == CLICK_VIEW_NORMAL) { + if (view.getTag() instanceof CommonPersonObjectClient) { + goToChildDetailActivity((CommonPersonObjectClient) view.getTag()); + } + } else if (view.getId() == org.smartregister.chw.core.R.id.due_only_layout) { + toggleFilterSelection(view); + } + } + + @Override + public void onSyncInProgress(FetchStatus fetchStatus) { + if (!SyncStatusBroadcastReceiver.getInstance().isSyncing() && (FetchStatus.fetched.equals(fetchStatus) || FetchStatus.nothingFetched.equals(fetchStatus)) && dueFilterActive && dueOnlyLayout != null) { + dueFilter(dueOnlyLayout); + Utils.showShortToast(getActivity(), getString(org.smartregister.chw.core.R.string.sync_complete)); + refreshSyncProgressSpinner(); + } else { + super.onSyncInProgress(fetchStatus); + } + } + + @Override + public void onSyncComplete(FetchStatus fetchStatus) { + if (!SyncStatusBroadcastReceiver.getInstance().isSyncing() && (FetchStatus.fetched.equals(fetchStatus) || FetchStatus.nothingFetched.equals(fetchStatus)) && (dueFilterActive && dueOnlyLayout != null)) { + dueFilter(dueOnlyLayout); + Utils.showShortToast(getActivity(), getString(org.smartregister.chw.core.R.string.sync_complete)); + refreshSyncProgressSpinner(); + } else { + super.onSyncComplete(fetchStatus); + } + + if (syncProgressBar != null) { + syncProgressBar.setVisibility(View.GONE); + } + if (syncButton != null) { + syncButton.setVisibility(View.GONE); + } + } + + @Override + protected void refreshSyncProgressSpinner() { + super.refreshSyncProgressSpinner(); + if (syncButton != null) { + syncButton.setVisibility(View.GONE); + } + } + + public void goToChildDetailActivity(CommonPersonObjectClient patient) { + String entityId = org.smartregister.family.util.Utils.getValue(patient.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + Intent intent = new Intent(getActivity(), OutOfAreaChildUpdateFormActivity.class); + intent.putExtra(Constants.ACTIVITY_PAYLOAD.ACTION, Constants.ACTION.START_REGISTRATION); + intent.putExtra(BASE_ENTITY_ID, entityId); + startActivity(intent); + } + + public void toggleFilterSelection(View dueOnlyLayout) { + if (dueOnlyLayout != null) { + if (dueOnlyLayout.getTag() == null) { + dueFilterActive = true; + dueFilter(dueOnlyLayout); + } else if (dueOnlyLayout.getTag().toString().equals(DUE_FILTER_TAG)) { + dueFilterActive = false; + normalFilter(dueOnlyLayout); + } + } + } + + private void normalFilter(View dueOnlyLayout) { + filter(searchText(), "", presenter().getMainCondition()); + dueOnlyLayout.setTag(null); + switchViews(dueOnlyLayout, false); + } + + protected String getDueFilterCondition() { + return presenter().getDueFilterCondition(); + } + + private void dueFilter(View dueOnlyLayout) { + filter(searchText(), "", getDueFilterCondition()); + dueOnlyLayout.setTag(DUE_FILTER_TAG); + switchViews(dueOnlyLayout, true); + } + + protected void filterAndSortExecute() { + filterandSortExecute(countBundle()); + } + + protected void filter(String filterString, String joinTableString, String mainConditionString) { + filters = filterString; + joinTable = joinTableString; + mainCondition = mainConditionString; + filterAndSortExecute(); + } + + private String searchText() { + return (getSearchView() == null) ? "" : getSearchView().getText().toString(); + } + + protected TextView getDueOnlyTextView(View dueOnlyLayout) { + return dueOnlyLayout.findViewById(org.smartregister.chw.core.R.id.due_only_text_view); + } + + private void switchViews(View dueOnlyLayout, boolean isPress) { + if (isPress) { + getDueOnlyTextView(dueOnlyLayout).setCompoundDrawablesWithIntrinsicBounds(0, 0, org.smartregister.chw.core.R.drawable.ic_due_filter_on, 0); + } else { + getDueOnlyTextView(dueOnlyLayout).setCompoundDrawablesWithIntrinsicBounds(0, 0, org.smartregister.chw.core.R.drawable.ic_due_filter_off, 0); + + } + } + + @Override + public void initializeAdapter(Set visibleColumns) { + OutOfAreaProvider deadClientsProvider = new OutOfAreaProvider(requireActivity(), commonRepository(), visibleColumns, registerActionHandler, paginationViewHandler); + clientAdapter = new RecyclerViewPaginatedAdapter(null, deadClientsProvider, context().commonrepository(this.tablename)); + clientAdapter.setCurrentlimit(20); + clientsView.setAdapter(clientAdapter); + } + + @Override + public CoreChildRegisterFragmentContract.Presenter presenter() { + return (CoreChildRegisterFragmentContract.Presenter) presenter; + } + + @Override + public void setupViews(View view) { + super.setupViews(view); + + if (ChwApplication.getApplicationFlavor().hasDefaultDueFilterForChildClient()) { + View dueOnlyLayout = view.findViewById(org.smartregister.chw.core.R.id.due_only_layout); + dueOnlyLayout.setVisibility(View.VISIBLE); + dueOnlyLayout.setOnClickListener(registerActionHandler); + dueOnlyLayout.setTag(null); + toggleFilterSelection(dueOnlyLayout); + } + } + + @Override + protected int getToolBarTitle() { + return R.string.out_of_area_registration; + } + + @Override + public void showNotFoundPopup(String uniqueId) { + if (getActivity() == null) { + return; + } + NoMatchDialogFragment.launchDialog((BaseRegisterActivity) getActivity(), DIALOG_TAG, uniqueId); + } + + @NotNull + @Override + public Loader onCreateLoader(int id, Bundle args) { + if (id == LOADER_ID) {// Returns a new CursorLoader + return new CursorLoader(requireActivity()) { + @Override + public Cursor loadInBackground() { + // Count query + String query = filterandSortQuery(); + return commonRepository().rawCustomQueryForAdapter(query); + } + }; + }// An invalid id was passed in + return null; + } + + + @Override + public void countExecute() { + try (Cursor c = commonRepository().rawCustomQueryForAdapter(getCountSelect())) { + c.moveToFirst(); + clientAdapter.setTotalcount(c.getInt(0)); + clientAdapter.setCurrentlimit(20); + clientAdapter.setCurrentoffset(0); + } catch (Exception e) { + Timber.e(e); + } + } + + public String getCountSelect() { + + String query = countSelect; + try { + if (StringUtils.isNoneBlank(filters)){ + query = "SELECT count(*) from ec_out_of_area_child"; + }else if (StringUtils.isBlank(filters) && !dueFilterActive){ + query = "SELECT count(*) from ec_out_of_area_child "+getFilters(filters); + } + + if (dueFilterActive){ + query = "SELECT count(*) from ec_out_of_area_child"; + } + + } catch (Exception e) { + Timber.e(e); + } + + return query; + } + + public String filterandSortQuery() { + String query = ""; + try { + if (StringUtils.isNoneBlank(filters)) { + query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset(), filters); + } else if (StringUtils.isBlank(filters) && !dueFilterActive){ + query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()); + } + if (dueFilterActive){ + query = customDeathQuery(clientAdapter.getCurrentlimit(), clientAdapter.getCurrentoffset()); + } + } catch (Exception e) { + e.printStackTrace(); + } + return query; + } + + public String customDeathQuery(int limit, int offset) { + return "Select ec_out_of_area_child.id as _id, ec_out_of_area_child.relationalid, ec_out_of_area_child.last_interacted_with, " + + "ec_out_of_area_child.base_entity_id , ec_out_of_area_child.first_name, ec_out_of_area_child.middle_name, " + + "ec_out_of_area_child.surname, ec_out_of_area_child.middle_name as family_middle_name, ec_out_of_area_child.unique_id, " + + "ec_out_of_area_child.gender, ec_out_of_area_child.dob, ec_out_of_area_child.dob_unknown, ec_out_of_area_child.date_created, " + + "ec_out_of_area_child.mother_name, ec_out_of_area_child.father_name " + + "from ec_out_of_area_child ORDER BY ec_out_of_area_child.last_interacted_with DESC LIMIT " + offset + "," + limit; + } + + public String customDeathQuery(int limit, int offset, String filter) { + return "Select ec_out_of_area_child.id as _id, ec_out_of_area_child.relationalid, ec_out_of_area_child.last_interacted_with, " + + "ec_out_of_area_child.base_entity_id , ec_out_of_area_child.first_name, ec_out_of_area_child.middle_name, " + + "ec_out_of_area_child.surname, ec_out_of_area_child.middle_name as family_middle_name, ec_out_of_area_child.unique_id, " + + "ec_out_of_area_child.gender, ec_out_of_area_child.dob, ec_out_of_area_child.dob_unknown, ec_out_of_area_child.date_created, " + + "ec_out_of_area_child.mother_name, ec_out_of_area_child.father_name " + + "from ec_out_of_area_child "+getFilters(filter)+" ORDER BY ec_out_of_area_child.last_interacted_with DESC LIMIT " + offset + "," + limit; + } + + public String getFilters(String filter) { + return "where ( ec_out_of_area_child.first_name like '%" + filter + "%' or ec_out_of_area_child.middle_name like '%" + filter + "%' or ec_out_of_area_child.unique_id like '%" + filter + "%')"; + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/intent/ChwPncCloseDateIntentFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/intent/ChwPncCloseDateIntentFlv.java new file mode 100644 index 0000000000..5bb83cb2f5 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/intent/ChwPncCloseDateIntentFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.intent; + +public class ChwPncCloseDateIntentFlv extends DefaultChwPncCloseDateIntentFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/AncHomeVisitInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/AncHomeVisitInteractorFlv.java new file mode 100644 index 0000000000..fc1bc4369e --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/AncHomeVisitInteractorFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.interactor; + +public class AncHomeVisitInteractorFlv extends DefaultAncHomeVisitInteractorFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/AncUpcomingServicesInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/AncUpcomingServicesInteractorFlv.java new file mode 100644 index 0000000000..7a2ae50d46 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/AncUpcomingServicesInteractorFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.interactor; + +public class AncUpcomingServicesInteractorFlv extends DefaultAncUpcomingServicesInteractorFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/ChildHomeVisitInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/ChildHomeVisitInteractorFlv.java new file mode 100644 index 0000000000..9c5e600739 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/ChildHomeVisitInteractorFlv.java @@ -0,0 +1,31 @@ +package org.smartregister.chw.interactor; + +import org.smartregister.chw.anc.model.BaseAncHomeVisitAction; +import org.smartregister.immunization.domain.ServiceWrapper; +import java.util.Map; +import timber.log.Timber; + +public class ChildHomeVisitInteractorFlv extends DefaultChildHomeVisitInteractorFlv { + + @Override + protected void bindEvents(Map serviceWrapperMap) throws BaseAncHomeVisitAction.ValidationException { + try { + evaluateChildVaccineCard(); + evaluateImmunization(); + evaluateExclusiveBreastFeeding(serviceWrapperMap); + evaluateVitaminA(serviceWrapperMap); + evaluateDeworming(serviceWrapperMap); + evaluateBirthCertForm(); + evaluateMUAC(); + evaluateDietary(); + evaluateECD(); + evaluateLLITN(); + evaluateObsAndIllness(); + } catch (BaseAncHomeVisitAction.ValidationException e) { + throw (e); + } catch (Exception e) { + Timber.e(e); + } + } + +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/ChildProfileInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/ChildProfileInteractorFlv.java new file mode 100644 index 0000000000..c729db310f --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/ChildProfileInteractorFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.interactor; + +public class ChildProfileInteractorFlv extends DefaultChildProfileInteractor { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/CoreOutOfAreaChildRegisterInteractor.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/CoreOutOfAreaChildRegisterInteractor.java new file mode 100644 index 0000000000..139bf3a184 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/CoreOutOfAreaChildRegisterInteractor.java @@ -0,0 +1,206 @@ +package org.smartregister.chw.interactor; + +import android.content.Context; +import android.content.Intent; +import android.util.Pair; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONObject; +import org.smartregister.CoreLibrary; +import org.smartregister.chw.contract.CoreOutOfAreaChildRegisterContract; +import org.smartregister.chw.core.application.CoreChwApplication; +import org.smartregister.chw.core.interactor.CoreChildRegisterInteractor; +import org.smartregister.chw.core.utils.Utils; +import org.smartregister.chw.util.CrvsConstants; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.domain.UniqueId; +import org.smartregister.domain.db.EventClient; +import org.smartregister.domain.jsonmapping.ClientClassification; +import org.smartregister.family.util.AppExecutors; +import org.smartregister.family.util.Constants; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.repository.AllSharedPreferences; +import org.smartregister.repository.BaseRepository; +import org.smartregister.repository.UniqueIdRepository; +import org.smartregister.sync.ClientProcessorForJava; +import org.smartregister.sync.helper.ECSyncHelper; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import timber.log.Timber; + +public class CoreOutOfAreaChildRegisterInteractor extends ClientProcessorForJava implements CoreOutOfAreaChildRegisterContract.Interactor { + + public static final String TAG = CoreChildRegisterInteractor.class.getName(); + private AppExecutors appExecutors; + + public CoreOutOfAreaChildRegisterInteractor(Context context) { + super(context); + new AppExecutors(); + } + + @Override + public void onDestroy(boolean isChangingConfiguration) { + //TODO set presenter or model to null + } + + @Override + public void getNextUniqueId(final Triple triple, final CoreOutOfAreaChildRegisterContract.InteractorCallBack callBack, final String familyId) { + + Runnable runnable = () -> { + UniqueId uniqueId = getUniqueIdRepository().getNextUniqueId(); + final String entityId = uniqueId != null ? uniqueId.getOpenmrsId() : ""; + appExecutors.mainThread().execute(() -> { + if (StringUtils.isBlank(entityId)) { + callBack.onNoUniqueId(); + } else { + callBack.onUniqueIdFetched(triple, entityId, familyId); + } + }); + }; + + appExecutors.diskIO().execute(runnable); + } + + @Override + public void saveRegistration(final Pair pair, final String jsonString, final boolean isEditMode, final CoreOutOfAreaChildRegisterContract.InteractorCallBack callBack) { + if (saveRegistration(pair, jsonString, isEditMode)) { + callBack.onRegistrationSaved(isEditMode, true, null); + } + } + + @Override + public void removeChildFromRegister(final String closeFormJsonString, final String providerId) { + Runnable runnable = () -> { + //TODO add functionality to remove family from register + }; + + appExecutors.diskIO().execute(runnable); + } + + @Override + public void openActivityOnFloatingButtonClick(Context context, Class activity) { + Intent intent = new Intent(context, activity); + context.startActivity(intent); + } + + private boolean saveRegistration(Pair pair, String jsonString, boolean isEditMode) { + + try { + Client baseClient = pair.first; + Event baseEvent = pair.second; + + JSONObject clientJson = null; + JSONObject eventJson = null; + + if (baseClient != null) { + clientJson = new JSONObject(JsonFormUtils.gson.toJson(baseClient)); + if (isEditMode) { + JsonFormUtils.mergeAndSaveClient(getSyncHelper(), baseClient); + } else { + getSyncHelper().addClient(baseClient.getBaseEntityId(), clientJson); + } + } + + if (baseEvent != null) { + eventJson = new JSONObject(JsonFormUtils.gson.toJson(baseEvent)); + getSyncHelper().addEvent(baseEvent.getBaseEntityId(), eventJson, BaseRepository.TYPE_Unsynced); + } + + checkMode(isEditMode, baseClient); + + saveImage(baseClient, baseEvent, jsonString); + + List eventClientList = new ArrayList<>(); + + org.smartregister.domain.Event domainEvent = (eventJson != null) ? + JsonFormUtils.gson.fromJson(eventJson.toString(), org.smartregister.domain.Event.class) : null; + org.smartregister.domain.Client domainClient = (clientJson != null) ? + JsonFormUtils.gson.fromJson(clientJson.toString(), org.smartregister.domain.Client.class) : null; + + eventClientList.add(new EventClient(domainEvent, domainClient)); + + long lastSyncTimeStamp = getAllSharedPreferences().fetchLastUpdatedAtDate(0); + Date lastSyncDate = new Date(lastSyncTimeStamp); + processClient(eventClientList, false); + getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); + + } catch (Exception e) { + Timber.e(e); + return false; + } + return true; + } + + private void checkMode(boolean isEditMode, Client baseClient) { + if (isEditMode) { + assert baseClient != null; + String currentOpenSRPId = baseClient.getIdentifier(Utils.metadata().uniqueIdentifierKey); + getUniqueIdRepository().open(currentOpenSRPId); + } else { + assert baseClient != null; + String opensrpId = baseClient.getIdentifier(Utils.metadata().uniqueIdentifierKey); + getUniqueIdRepository().close(opensrpId); + } + } + + private void saveImage(Client baseClient, Event baseEvent, String jsonString) { + if (baseClient != null || baseEvent != null) { + String imageLocation = JsonFormUtils.getFieldValue(jsonString, Constants.KEY.PHOTO); + assert baseEvent != null; + assert baseClient != null; + JsonFormUtils.saveImage(baseEvent.getProviderId(), baseClient.getBaseEntityId(), imageLocation); + } + } + + public synchronized void processClient(List eventClientList, boolean localSubmission) throws Exception { + final String EC_CLIENT_CLASSIFICATION = CrvsConstants.EC_CLIENT_CLASSIFICATION; + ClientClassification clientClassification = assetJsonToJava(EC_CLIENT_CLASSIFICATION, ClientClassification.class); + if (clientClassification == null) { + return; + } + + if (!eventClientList.isEmpty()) { + for (EventClient eventClient : eventClientList) { + // Iterate through the events + org.smartregister.domain.Client client = eventClient.getClient(); + if (client != null) { + org.smartregister.domain.Event event = eventClient.getEvent(); + String eventType = event.getEventType(); + + if (processorMap.containsKey(eventType)) { + try { + processEventUsingMiniProcessor(clientClassification, eventClient, eventType); + } catch (Exception ex) { + Timber.e(ex); + } + } else { + processEvent(event, client, clientClassification); + } + } + + if (localSubmission && Objects.requireNonNull(CoreLibrary.getInstance().getSyncConfiguration()).runPlanEvaluationOnClientProcessing()) { + processPlanEvaluation(eventClient); + } + } + } + } + + public ECSyncHelper getSyncHelper() { + return CoreChwApplication.getInstance().getEcSyncHelper(); + } + + public AllSharedPreferences getAllSharedPreferences() { + return Utils.context().allSharedPreferences(); + } + + public UniqueIdRepository getUniqueIdRepository() { + return CoreChwApplication.getInstance().getUniqueIdRepository(); + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/CoreOutOfAreaDeathRegisterInteractor.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/CoreOutOfAreaDeathRegisterInteractor.java new file mode 100644 index 0000000000..682db6af8a --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/CoreOutOfAreaDeathRegisterInteractor.java @@ -0,0 +1,207 @@ +package org.smartregister.chw.interactor; + +import android.content.Context; +import android.content.Intent; +import android.util.Pair; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONObject; +import org.smartregister.CoreLibrary; +import org.smartregister.chw.contract.CoreOutOfAreaDeathRegisterContract; +import org.smartregister.chw.core.application.CoreChwApplication; +import org.smartregister.chw.core.interactor.CoreChildRegisterInteractor; +import org.smartregister.chw.core.utils.Utils; +import org.smartregister.chw.util.CrvsConstants; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.domain.UniqueId; +import org.smartregister.domain.db.EventClient; +import org.smartregister.domain.jsonmapping.ClientClassification; +import org.smartregister.family.util.AppExecutors; +import org.smartregister.family.util.Constants; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.repository.AllSharedPreferences; +import org.smartregister.repository.BaseRepository; +import org.smartregister.repository.UniqueIdRepository; +import org.smartregister.sync.ClientProcessorForJava; +import org.smartregister.sync.helper.ECSyncHelper; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import timber.log.Timber; + +public class CoreOutOfAreaDeathRegisterInteractor extends ClientProcessorForJava implements CoreOutOfAreaDeathRegisterContract.Interactor { + + public static final String TAG = CoreChildRegisterInteractor.class.getName(); + private AppExecutors appExecutors; + + public CoreOutOfAreaDeathRegisterInteractor(Context context) { + super(context); + new AppExecutors(); + } + + @Override + public void onDestroy(boolean isChangingConfiguration) { + //TODO set presenter or model to null + } + + @Override + public void getNextUniqueId(final Triple triple, final CoreOutOfAreaDeathRegisterContract.InteractorCallBack callBack, final String familyId) { + + Runnable runnable = () -> { + UniqueId uniqueId = getUniqueIdRepository().getNextUniqueId(); + final String entityId = uniqueId != null ? uniqueId.getOpenmrsId() : ""; + appExecutors.mainThread().execute(() -> { + if (StringUtils.isBlank(entityId)) { + callBack.onNoUniqueId(); + } else { + callBack.onUniqueIdFetched(triple, entityId, familyId); + } + }); + }; + + appExecutors.diskIO().execute(runnable); + } + + @Override + public void saveRegistration(final Pair pair, final String jsonString, final boolean isEditMode, final CoreOutOfAreaDeathRegisterContract.InteractorCallBack callBack) { + if (saveRegistration(pair, jsonString, isEditMode)) { + callBack.onRegistrationSaved(isEditMode, true, null); + } + } + + @Override + public void removeChildFromRegister(final String closeFormJsonString, final String providerId) { + Runnable runnable = () -> { + //TODO add functionality to remove family from register + }; + + appExecutors.diskIO().execute(runnable); + } + + @Override + public void openActivityOnFloatingButtonClick(Context context, Class activity) { + Intent intent = new Intent(context, activity); + context.startActivity(intent); + } + + private boolean saveRegistration(Pair pair, String jsonString, boolean isEditMode) { + + try { + + Client baseClient = pair.first; + Event baseEvent = pair.second; + + JSONObject clientJson = null; + JSONObject eventJson = null; + + if (baseClient != null) { + clientJson = new JSONObject(JsonFormUtils.gson.toJson(baseClient)); + if (isEditMode) { + JsonFormUtils.mergeAndSaveClient(getSyncHelper(), baseClient); + } else { + getSyncHelper().addClient(baseClient.getBaseEntityId(), clientJson); + } + } + + if (baseEvent != null) { + eventJson = new JSONObject(JsonFormUtils.gson.toJson(baseEvent)); + getSyncHelper().addEvent(baseEvent.getBaseEntityId(), eventJson, BaseRepository.TYPE_Unsynced); + } + + checkMode(isEditMode, baseClient); + + saveImage(baseClient, baseEvent, jsonString); + + List eventClientList = new ArrayList<>(); + + org.smartregister.domain.Event domainEvent = (eventJson != null) ? + JsonFormUtils.gson.fromJson(eventJson.toString(), org.smartregister.domain.Event.class) : null; + org.smartregister.domain.Client domainClient = (clientJson != null) ? + JsonFormUtils.gson.fromJson(clientJson.toString(), org.smartregister.domain.Client.class) : null; + + eventClientList.add(new EventClient(domainEvent, domainClient)); + + long lastSyncTimeStamp = getAllSharedPreferences().fetchLastUpdatedAtDate(0); + Date lastSyncDate = new Date(lastSyncTimeStamp); + processClient(eventClientList, false); + getAllSharedPreferences().saveLastUpdatedAtDate(lastSyncDate.getTime()); + + } catch (Exception e) { + Timber.e(e); + return false; + } + return true; + } + + private void saveImage(Client baseClient, Event baseEvent, String jsonString) { + if (baseClient != null || baseEvent != null) { + String imageLocation = JsonFormUtils.getFieldValue(jsonString, Constants.KEY.PHOTO); + assert baseEvent != null; + assert baseClient != null; + JsonFormUtils.saveImage(baseEvent.getProviderId(), baseClient.getBaseEntityId(), imageLocation); + } + } + + private void checkMode(boolean isEditMode, Client baseClient) { + if (isEditMode) { + assert baseClient != null; + String currentOpenSRPId = baseClient.getIdentifier(Utils.metadata().uniqueIdentifierKey); + getUniqueIdRepository().open(currentOpenSRPId); + } else { + assert baseClient != null; + String opensrpId = baseClient.getIdentifier(Utils.metadata().uniqueIdentifierKey); + getUniqueIdRepository().close(opensrpId); + } + } + + public synchronized void processClient(List eventClientList, boolean localSubmission) throws Exception { + final String EC_CLIENT_CLASSIFICATION = CrvsConstants.EC_CLIENT_CLASSIFICATION; + ClientClassification clientClassification = assetJsonToJava(EC_CLIENT_CLASSIFICATION, ClientClassification.class); + if (clientClassification == null) { + return; + } + + if (!eventClientList.isEmpty()) { + for (EventClient eventClient : eventClientList) { + // Iterate through the events + org.smartregister.domain.Client client = eventClient.getClient(); + if (client != null) { + org.smartregister.domain.Event event = eventClient.getEvent(); + String eventType = event.getEventType(); + + if (processorMap.containsKey(eventType)) { + try { + processEventUsingMiniProcessor(clientClassification, eventClient, eventType); + } catch (Exception ex) { + Timber.e(ex); + } + } else { + processEvent(event, client, clientClassification); + } + } + + if (localSubmission && Objects.requireNonNull(CoreLibrary.getInstance().getSyncConfiguration()).runPlanEvaluationOnClientProcessing()) { + processPlanEvaluation(eventClient); + } + } + } + } + + public ECSyncHelper getSyncHelper() { + return CoreChwApplication.getInstance().getEcSyncHelper(); + } + + public AllSharedPreferences getAllSharedPreferences() { + return Utils.context().allSharedPreferences(); + } + + public UniqueIdRepository getUniqueIdRepository() { + return CoreChwApplication.getInstance().getUniqueIdRepository(); + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/FamilyChangeContractInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/FamilyChangeContractInteractorFlv.java new file mode 100644 index 0000000000..5c4dc9e619 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/FamilyChangeContractInteractorFlv.java @@ -0,0 +1,5 @@ +package org.smartregister.chw.interactor; + +public class FamilyChangeContractInteractorFlv extends DefaultFamilyChangeContractInteractorFlv { +} + diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/FpFollowUpVisitInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/FpFollowUpVisitInteractorFlv.java new file mode 100644 index 0000000000..fb95b65882 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/FpFollowUpVisitInteractorFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.interactor; + +public class FpFollowUpVisitInteractorFlv extends DefaultFpFollowUpVisitInteractorFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/PncHomeVisitInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/PncHomeVisitInteractorFlv.java new file mode 100644 index 0000000000..bf97dfaeb7 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/PncHomeVisitInteractorFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.interactor; + +public class PncHomeVisitInteractorFlv extends DefaultPncHomeVisitInteractorFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/PncUpcomingServicesInteractorFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/PncUpcomingServicesInteractorFlv.java new file mode 100644 index 0000000000..845f1197ca --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/interactor/PncUpcomingServicesInteractorFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.interactor; + +public class PncUpcomingServicesInteractorFlv extends DefaultPncUpcomingServiceInteractorFlv{ +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/AncRegisterFragmentModelFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/AncRegisterFragmentModelFlv.java new file mode 100644 index 0000000000..23779daef1 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/AncRegisterFragmentModelFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.model; + +public class AncRegisterFragmentModelFlv extends DefaultAncRegisterFragmentModelFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/BirthCertificationRegisterFragmentModel.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/BirthCertificationRegisterFragmentModel.java new file mode 100644 index 0000000000..2b378b8b93 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/BirthCertificationRegisterFragmentModel.java @@ -0,0 +1,38 @@ +package org.smartregister.chw.model; + +import static org.smartregister.chw.core.utils.CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_CHILD; + +import org.smartregister.chw.core.model.CoreCertificationRegisterFragmentModel; +import org.smartregister.chw.util.CrvsDBUtils; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; +import org.smartregister.family.util.DBConstants; + +public class BirthCertificationRegisterFragmentModel extends CoreCertificationRegisterFragmentModel { + + @Override + public String countSelect(String tableName, String mainCondition, String familyMemberTableName) { + SmartRegisterQueryBuilder countQueryBuilder = new SmartRegisterQueryBuilder(); + countQueryBuilder.selectInitiateMainTableCounts(tableName); + countQueryBuilder.customJoin("INNER JOIN " + familyMemberTableName + " ON " + tableName + ".base_entity_id = " + familyMemberTableName + ".base_entity_id"); + return countQueryBuilder.mainCondition(mainCondition); + } + + @Override + public String mainSelect(String tableName, String familyTableName, String familyMemberTableName, String mainCondition) { + SmartRegisterQueryBuilder queryBuilder = new SmartRegisterQueryBuilder(); + queryBuilder.selectInitiateMainTable(tableName, CrvsDBUtils.mainBirthCertificationColumns(tableName, familyTableName, familyMemberTableName)); + queryBuilder.customJoin("LEFT JOIN " + familyTableName + " ON " + tableName + "." + DBConstants.KEY.RELATIONAL_ID + " = " + familyTableName + ".id COLLATE NOCASE "); + queryBuilder.customJoin("LEFT JOIN " + familyMemberTableName + " ON " + familyMemberTableName + "." + DBConstants.KEY.BASE_ENTITY_ID + " = " + familyTableName + ".primary_caregiver COLLATE NOCASE "); + queryBuilder.customJoin("LEFT JOIN (select base_entity_id , max(visit_date) visit_date from visits GROUP by base_entity_id) VISIT_SUMMARY ON VISIT_SUMMARY.base_entity_id = " + tableName + "." + DBConstants.KEY.BASE_ENTITY_ID); + + return queryBuilder.mainCondition(mainCondition); + } + + + public String outOfAreaSelect(String mainCondition) { + SmartRegisterQueryBuilder queryBuilder = new SmartRegisterQueryBuilder(); + queryBuilder.selectInitiateMainTable(EC_OUT_OF_AREA_CHILD, CrvsDBUtils.outOfAreaBirthCertificationMainColumns(EC_OUT_OF_AREA_CHILD)); + return queryBuilder.mainCondition(mainCondition); + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaChildRegisterModel.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaChildRegisterModel.java new file mode 100644 index 0000000000..2ac104793d --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaChildRegisterModel.java @@ -0,0 +1,64 @@ +package org.smartregister.chw.model; + +import android.util.Pair; +import org.json.JSONObject; +import org.smartregister.chw.contract.CoreOutOfAreaChildRegisterContract; +import org.smartregister.chw.util.JsonFormUtils; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.configurableviews.ConfigurableViewsLibrary; +import org.smartregister.family.util.Utils; +import org.smartregister.location.helper.LocationHelper; +import org.smartregister.util.FormUtils; +import java.util.List; +import timber.log.Timber; + +public class CoreOutOfAreaChildRegisterModel implements CoreOutOfAreaChildRegisterContract.Model { + private FormUtils formUtils; + + @Override + public void registerViewConfigurations(List viewIdentifiers) { + ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().registerViewConfigurations(viewIdentifiers); + } + + @Override + public void unregisterViewConfiguration(List viewIdentifiers) { + ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().unregisterViewConfiguration(viewIdentifiers); + } + + @Override + public void saveLanguage(String language) { + // TODO Save Language + } + + @Override + public String getLocationId(String locationName) { + return LocationHelper.getInstance().getOpenMrsLocationId(locationName); + } + + @Override + public Pair processRegistration(String jsonString) { + return JsonFormUtils.processOutOfAreaChildRegistrationForm(Utils.context().allSharedPreferences(), jsonString); + } + + @Override + public JSONObject getFormAsJson(String formName, String entityId, String currentLocationId, String familyId) { + return null; + } + + @Override + public String getInitials() { + return Utils.getUserInitials(); + } + + public FormUtils getFormUtils() { + if (formUtils == null) { + try { + formUtils = FormUtils.getInstance(Utils.context().applicationContext()); + } catch (Exception e) { + Timber.e(e); + } + } + return formUtils; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaDeathFragmentModel.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaDeathFragmentModel.java new file mode 100644 index 0000000000..52445c7e0e --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaDeathFragmentModel.java @@ -0,0 +1,90 @@ +package org.smartregister.chw.model; + +import org.apache.commons.lang3.StringUtils; +import org.json.JSONArray; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.utils.ConfigHelper; +import org.smartregister.chw.util.OutOfAreaDeathUtils; +import org.smartregister.configurableviews.ConfigurableViewsLibrary; +import org.smartregister.configurableviews.model.Field; +import org.smartregister.configurableviews.model.RegisterConfiguration; +import org.smartregister.configurableviews.model.View; +import org.smartregister.configurableviews.model.ViewConfiguration; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; +import org.smartregister.domain.Response; +import org.smartregister.domain.ResponseStatus; +import org.smartregister.family.util.Utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import timber.log.Timber; + +public class CoreOutOfAreaDeathFragmentModel implements CoreChildRegisterFragmentContract.Model { + @Override + public RegisterConfiguration defaultRegisterConfiguration() { + return ConfigHelper.defaultRegisterConfiguration(Utils.context().applicationContext()); + } + + @Override + public ViewConfiguration getViewConfiguration(String viewConfigurationIdentifier) { + return ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().getViewConfiguration(viewConfigurationIdentifier); + } + + @Override + public Set getRegisterActiveColumns(String viewConfigurationIdentifier) { + return ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().getRegisterActiveColumns(viewConfigurationIdentifier); + } + + @Override + public String countSelect(String tableName, String mainCondition, String familyMemberTableName) { + SmartRegisterQueryBuilder countQueryBuilder = new SmartRegisterQueryBuilder(); + countQueryBuilder.selectInitiateMainTableCounts(tableName); + return countQueryBuilder.mainCondition(mainCondition); + } + + @Override + public String mainSelect(String tableName, String familyName, String familyMemberName, String mainCondition) { + return OutOfAreaDeathUtils.mainSelectRegisterWithoutGroupby(tableName, mainCondition); + } + + @Override + public String getFilterText(List list, String filterTitle) { + List filterList = list; + if (filterList == null) { + filterList = new ArrayList<>(); + } + + String filter = filterTitle; + if (filter == null) { + filter = ""; + } + return "" + filter + " (" + filterList.size() + ")"; + } + + @Override + public String getSortText(Field sortField) { + String sortText = ""; + if (sortField != null) { + if (StringUtils.isNotBlank(sortField.getDisplayName())) { + sortText = "(Sort: " + sortField.getDisplayName() + ")"; + } else if (StringUtils.isNotBlank(sortField.getDbAlias())) { + sortText = "(Sort: " + sortField.getDbAlias() + ")"; + } + } + return sortText; + } + + @Override + public JSONArray getJsonArray(Response response) { + try { + if (response.status().equals(ResponseStatus.success)) { + return new JSONArray(response.payload()); + } + } catch (Exception e) { + Timber.e(e); + } + return null; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaDeathRegisterModel.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaDeathRegisterModel.java new file mode 100644 index 0000000000..f020f19f72 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaDeathRegisterModel.java @@ -0,0 +1,69 @@ +package org.smartregister.chw.model; + +import android.util.Pair; + +import org.json.JSONObject; +import org.smartregister.chw.contract.CoreOutOfAreaDeathRegisterContract; +import org.smartregister.chw.util.JsonFormUtils; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.configurableviews.ConfigurableViewsLibrary; +import org.smartregister.family.util.Utils; +import org.smartregister.location.helper.LocationHelper; +import org.smartregister.util.FormUtils; + +import java.util.List; + +import timber.log.Timber; + +public class CoreOutOfAreaDeathRegisterModel implements CoreOutOfAreaDeathRegisterContract.Model { + private FormUtils formUtils; + + @Override + public void registerViewConfigurations(List viewIdentifiers) { + ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().registerViewConfigurations(viewIdentifiers); + } + + @Override + public void unregisterViewConfiguration(List viewIdentifiers) { + ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().unregisterViewConfiguration(viewIdentifiers); + } + + @Override + public void saveLanguage(String language) { + // TODO Save Language + //Map langs = getAvailableLanguagesMap(); + //Utils.saveLanguage(Utils.getKeyByValue(langs, language)); + } + + @Override + public String getLocationId(String locationName) { + return LocationHelper.getInstance().getOpenMrsLocationId(locationName); + } + + @Override + public Pair processRegistration(String jsonString) { + return JsonFormUtils.processOutOfAreaDeathRegistrationForm(Utils.context().allSharedPreferences(), jsonString); + } + + @Override + public JSONObject getFormAsJson(String formName, String entityId, String currentLocationId, String familyId) throws Exception { + return null; + } + + @Override + public String getInitials() { + return Utils.getUserInitials(); + } + + public FormUtils getFormUtils() { + if (formUtils == null) { + try { + formUtils = FormUtils.getInstance(Utils.context().applicationContext()); + } catch (Exception e) { + Timber.e(e); + } + } + return formUtils; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaFragmentModel.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaFragmentModel.java new file mode 100644 index 0000000000..1333aee340 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/CoreOutOfAreaFragmentModel.java @@ -0,0 +1,90 @@ +package org.smartregister.chw.model; + +import org.apache.commons.lang3.StringUtils; +import org.json.JSONArray; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.utils.ConfigHelper; +import org.smartregister.chw.util.CoreChildUtils; +import org.smartregister.configurableviews.ConfigurableViewsLibrary; +import org.smartregister.configurableviews.model.Field; +import org.smartregister.configurableviews.model.RegisterConfiguration; +import org.smartregister.configurableviews.model.View; +import org.smartregister.configurableviews.model.ViewConfiguration; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; +import org.smartregister.domain.Response; +import org.smartregister.domain.ResponseStatus; +import org.smartregister.family.util.Utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import timber.log.Timber; + +public class CoreOutOfAreaFragmentModel implements CoreChildRegisterFragmentContract.Model { + @Override + public RegisterConfiguration defaultRegisterConfiguration() { + return ConfigHelper.defaultRegisterConfiguration(Utils.context().applicationContext()); + } + + @Override + public ViewConfiguration getViewConfiguration(String viewConfigurationIdentifier) { + return ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().getViewConfiguration(viewConfigurationIdentifier); + } + + @Override + public Set getRegisterActiveColumns(String viewConfigurationIdentifier) { + return ConfigurableViewsLibrary.getInstance().getConfigurableViewsHelper().getRegisterActiveColumns(viewConfigurationIdentifier); + } + + @Override + public String countSelect(String tableName, String mainCondition, String familyMemberTableName) { + SmartRegisterQueryBuilder countQueryBuilder = new SmartRegisterQueryBuilder(); + countQueryBuilder.selectInitiateMainTableCounts(tableName); + return countQueryBuilder.mainCondition(mainCondition); + } + + @Override + public String mainSelect(String tableName, String familyName, String familyMemberName, String mainCondition) { + return CoreChildUtils.mainSelectRegisterWithoutGroupby(tableName, familyName, familyMemberName, mainCondition); + } + + @Override + public String getFilterText(List list, String filterTitle) { + List filterList = list; + if (filterList == null) { + filterList = new ArrayList<>(); + } + + String filter = filterTitle; + if (filter == null) { + filter = ""; + } + return "" + filter + " (" + filterList.size() + ")"; + } + + @Override + public String getSortText(Field sortField) { + String sortText = ""; + if (sortField != null) { + if (StringUtils.isNotBlank(sortField.getDisplayName())) { + sortText = "(Sort: " + sortField.getDisplayName() + ")"; + } else if (StringUtils.isNotBlank(sortField.getDbAlias())) { + sortText = "(Sort: " + sortField.getDbAlias() + ")"; + } + } + return sortText; + } + + @Override + public JSONArray getJsonArray(Response response) { + try { + if (response.status().equals(ResponseStatus.success)) { + return new JSONArray(response.payload()); + } + } catch (Exception e) { + Timber.e(e); + } + return null; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/DeathCertificationRegisterFragmentModel.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/DeathCertificationRegisterFragmentModel.java new file mode 100644 index 0000000000..6f36bea706 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/DeathCertificationRegisterFragmentModel.java @@ -0,0 +1,174 @@ +package org.smartregister.chw.model; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.anc.util.Constants.TABLES.EC_CHILD; +import static org.smartregister.chw.anc.util.Constants.TABLES.PREGNANCY_OUTCOME; +import static org.smartregister.chw.core.utils.CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_DEATH; + +import org.apache.commons.lang3.StringUtils; +import org.smartregister.chw.core.model.CoreCertificationRegisterFragmentModel; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; + +import java.text.MessageFormat; + +public class DeathCertificationRegisterFragmentModel extends CoreCertificationRegisterFragmentModel { + @Override + public String countSelect(String tableName, String mainCondition, String familyMemberTableName) { + return mainSelect(tableName, mainCondition, familyMemberTableName, mainCondition); + } + + @Override + public String mainSelect(String tableName, String familyTableName, String familyMemberTableName, String mainCondition) { + SmartRegisterQueryBuilder removedFamilyMembersBuilder = new SmartRegisterQueryBuilder(getRemovedFamilyMembersQueryString()); + SmartRegisterQueryBuilder removedChildrenBuilder = new SmartRegisterQueryBuilder(getRemovedEcChildrenQueryString()); + SmartRegisterQueryBuilder stillBirthsBuilder = new SmartRegisterQueryBuilder(getStillBirthsPregnancyOutcomeQueryString()); + SmartRegisterQueryBuilder outOfAreaBuilder = new SmartRegisterQueryBuilder(getOutOfAreaDeathsQueryString()); + + removedFamilyMembersBuilder.mainCondition(mainCondition); + removedFamilyMembersBuilder.customJoin("UNION " + removedChildrenBuilder.mainCondition(mainCondition)); + removedFamilyMembersBuilder.customJoin("UNION " + stillBirthsBuilder.mainCondition(mainCondition)); + removedFamilyMembersBuilder.customJoin("UNION " + outOfAreaBuilder.mainCondition(mainCondition)); + removedFamilyMembersBuilder.customJoin(getOrderByQueryString()); + + return removedFamilyMembersBuilder.toString(); + } + + private String getOrderByQueryString() { + return " ORDER BY last_interacted_with DESC"; + } + + public String getRemovedFamilyMembersQueryString() { + return "Select ec_family_member.id as _id , ec_family_member.relational_id as relationalid , ec_family_member.last_interacted_with , ec_family_member.base_entity_id , " + + "'' as first_name , '' as middle_name , ec_family_member.first_name as family_first_name , ec_family_member.last_name as family_last_name , " + + "ec_family_member.middle_name as family_middle_name , ec_family_member.phone_number as family_member_phone_number , ec_family_member.other_phone_number as " + + "family_member_phone_number_other , ec_family.village_town as family_home_address ,'' as last_name, ec_family_member.unique_id, ec_family_member.gender, ec_family_member.dob, " + + "ec_family_member.dob_unknown, '' as last_home_visit, '' as visit_not_done, '' as early_bf_1hr, '' as physically_challenged, '' as birth_cert, '' as birth_cert_issue_date, " + + "'' as birth_cert_num, '' as birth_notification, '' as date_of_illness, '' as illness_description, '' as date_created, '' as action_taken, '' as vaccine_card, " + + "'' as preg_outcome, ec_family_member.received_death_certificate, ec_family_member.death_certificate_issue_date, ec_family_member.death_notification_done, " + + "ec_family_member.death_certificate_number, ec_family_member.official_id, ec_family_member.official_name, ec_family_member.official_position, ec_family_member.official_address, " + + "ec_family_member.official_number, ec_family_member.informant_name, ec_family_member.informant_relationship, ec_family_member.informant_address, ec_family_member.informant_phone, " + + "'" + CoreConstants.TABLE_NAME.FAMILY_MEMBER + "' as '" + CLIENT_TYPE + "' from ec_family_member LEFT JOIN ec_family ON ec_family_member.base_entity_id = ec_family.primary_caregiver COLLATE NOCASE WHERE ec_family_member.is_closed = 1 AND ec_family_member.dod IS NOT NULL "; + } + + public String getRemovedEcChildrenQueryString() { + return "Select ec_child.id as _id , ec_child.relational_id as relationalid , ec_child.last_interacted_with , ec_child.base_entity_id , ec_child.first_name , ec_child.middle_name , " + + "ec_family_member.first_name as family_first_name , ec_family_member.last_name as family_last_name , ec_family_member.middle_name as family_middle_name , ec_family_member.phone_number as family_member_phone_number , " + + "ec_family_member.other_phone_number as family_member_phone_number_other , ec_family.village_town as family_home_address , ec_child.last_name , ec_child.unique_id , ec_child.gender , " + + "ec_child.dob , ec_child.dob_unknown , ec_child.last_home_visit , ec_child.visit_not_done , ec_child.early_bf_1hr , ec_child.physically_challenged , ec_child.birth_cert , ec_child.birth_cert_issue_date , " + + "ec_child.birth_cert_num , ec_child.birth_notification , ec_child.date_of_illness , ec_child.illness_description , ec_child.date_created , ec_child.action_taken , ec_child.vaccine_card, '' as preg_outcome, " + + "ec_child.received_death_certificate, ec_child.death_certificate_issue_date, ec_child.death_notification_done, ec_child.death_certificate_number, ec_child.official_id , ec_child.official_name, ec_child.official_position, " + + "ec_child.official_address, ec_child.official_number, ec_child.informant_name, ec_child.informant_relationship, ec_child.informant_address, ec_child.informant_phone, '" + EC_CHILD + "' as '" + CLIENT_TYPE + "' " + + "FROM ec_child LEFT JOIN ec_family ON ec_child.relational_id = ec_family.id COLLATE NOCASE LEFT JOIN ec_family_member ON ec_family_member.base_entity_id = ec_family.primary_caregiver COLLATE NOCASE " + + "LEFT JOIN (select base_entity_id , max(visit_date) visit_date from visits GROUP by base_entity_id) VISIT_SUMMARY ON VISIT_SUMMARY.base_entity_id = ec_child.base_entity_id WHERE ec_child.is_closed is 1 and ec_child.dod IS NOT NULL"; + } + + + public String getStillBirthsPregnancyOutcomeQueryString() { + return "Select ec_pregnancy_outcome.id as _id, ec_pregnancy_outcome.relational_id as relationalid, ec_pregnancy_outcome.last_interacted_with, ec_pregnancy_outcome.base_entity_id, '' as first_name, '' as middle_name, " + + "ec_family_member.first_name as family_first_name , ec_family_member.last_name as family_last_name , ec_family_member.middle_name as family_middle_name , ec_family_member.phone_number as family_member_phone_number , " + + "ec_family_member.other_phone_number as family_member_phone_number_other , ec_family.village_town as family_home_address ,'' as last_name, ec_family_member.unique_id, ec_family_member.gender, ec_family_member.dob, " + + "ec_family_member.dob_unknown, '' as last_home_visit, '' as visit_not_done, '' as early_bf_1hr, '' as physically_challenged, '' as birth_cert, '' as birth_cert_issue_date, '' as birth_cert_num, " + + "'' as birth_notification, '' as date_of_illness, '' as illness_description, '' as date_created, '' as action_taken, '' as vaccine_card, ec_pregnancy_outcome.preg_outcome, ec_family_member.received_death_certificate, " + + "ec_family_member.death_certificate_issue_date, ec_family_member.death_notification_done, ec_family_member.death_certificate_number, ec_family_member.official_id , ec_family_member.official_name, " + + "ec_family_member.official_position, ec_family_member.official_address, ec_family_member.official_number, ec_family_member.informant_name, ec_family_member.informant_relationship, ec_family_member.informant_address, " + + "ec_family_member.informant_phone, '" + PREGNANCY_OUTCOME + "' as '" + CLIENT_TYPE + "' from ec_pregnancy_outcome LEFT JOIN ec_family_member ON ec_pregnancy_outcome.base_entity_id = ec_family_member.base_entity_id LEFT JOIN ec_family ON " + + "ec_pregnancy_outcome.relational_id = ec_family.id COLLATE NOCASE WHERE ec_pregnancy_outcome.preg_outcome = 'Stillbirth'"; + } + + + private String getOutOfAreaDeathsQueryString() { + return "Select ec_out_of_area_death.id as _id , ec_out_of_area_death.relationalid as relationalid , ec_out_of_area_death.last_interacted_with , ec_out_of_area_death.base_entity_id , ec_out_of_area_death.name as first_name , " + + "'' as middle_name , '' as family_first_name , '' as family_last_name , '' as family_middle_name , ec_out_of_area_death.official_number as family_member_phone_number , '' as family_member_phone_number_other , " + + "ec_out_of_area_death.death_place as family_home_address , '' as last_name, ec_out_of_area_death.unique_id, ec_out_of_area_death.sex as gender, ec_out_of_area_death.dob, ec_out_of_area_death.dob_unknown, '' as last_home_visit, " + + "'' as visit_not_done, '' as early_bf_1hr, '' as physically_challenged, '' as birth_cert, '' as birth_cert_issue_date, '' as birth_cert_num, '' as birth_notification, '' as date_of_illness, '' as illness_description, " + + "ec_out_of_area_death.date_created, '' as action_taken, '' as vaccine_card, '' as preg_outcome, ec_out_of_area_death.received_death_certificate, ec_out_of_area_death.death_certificate_issue_date, ec_out_of_area_death.death_notification_done, " + + "ec_out_of_area_death.death_certificate_number, ec_out_of_area_death.official_id , ec_out_of_area_death.official_name, ec_out_of_area_death.official_position, ec_out_of_area_death.official_address, ec_out_of_area_death.official_number, " + + "ec_out_of_area_death.informant_name, ec_out_of_area_death.informant_relationship, ec_out_of_area_death.informant_address, ec_out_of_area_death.informant_phone, '" + EC_OUT_OF_AREA_DEATH + "' as '" + CLIENT_TYPE + "' from ec_out_of_area_death"; + } + + public String getCustomSelectString(String condition, String filters, String SortQueries, boolean isDueActive) { + + SmartRegisterQueryBuilder removedFamilyMembersBuilder = new SmartRegisterQueryBuilder(getRemovedFamilyMembersQueryString()); + removedFamilyMembersBuilder.mainCondition(condition); + + SmartRegisterQueryBuilder removedChildrenBuilder = new SmartRegisterQueryBuilder(getRemovedEcChildrenQueryString()); + removedChildrenBuilder.mainCondition(condition); + + SmartRegisterQueryBuilder stillBirthsBuilder = new SmartRegisterQueryBuilder(getStillBirthsPregnancyOutcomeQueryString()); + stillBirthsBuilder.mainCondition(condition); + + SmartRegisterQueryBuilder outOfAreaBuilder = new SmartRegisterQueryBuilder(getOutOfAreaDeathsQueryString()); + outOfAreaBuilder.mainCondition(condition); + + if (StringUtils.isNotBlank(filters)) { + removedFamilyMembersBuilder.addCondition(getFamilyMemberFilterString(filters)); + removedChildrenBuilder.addCondition(getRemovedChildFilterString(filters)); + stillBirthsBuilder.addCondition(getFamilyMemberFilterString(filters)); + outOfAreaBuilder.mainCondition(getOutAreaFilterString(filters)); + } + + if (isDueActive) { + removedFamilyMembersBuilder.addCondition(" and " + CoreConstants.TABLE_NAME.FAMILY_MEMBER + "." + getDueCondition()); + removedChildrenBuilder.addCondition(" and " + EC_CHILD + "." + getDueCondition()); + stillBirthsBuilder.addCondition(" and " + CoreConstants.TABLE_NAME.FAMILY_MEMBER + "." + getDueCondition()); + if (StringUtils.isBlank(filters)) { + outOfAreaBuilder.mainCondition(EC_OUT_OF_AREA_DEATH + ".received_death_certificate = 'Yes'"); + } else { + outOfAreaBuilder.addCondition(" and " + EC_OUT_OF_AREA_DEATH + "." + getDueCondition()); + } + } + removedFamilyMembersBuilder.customJoin("UNION " + removedChildrenBuilder); + removedFamilyMembersBuilder.customJoin("UNION " + stillBirthsBuilder); + removedFamilyMembersBuilder.customJoin("UNION " + outOfAreaBuilder); + + return removedFamilyMembersBuilder.orderbyCondition(SortQueries); + } + + public String getDueCondition() { + return "received_death_certificate = 'Yes'"; + } + + public String getFamilyMemberFilterString(String filters) { + StringBuilder customFilter = new StringBuilder(); + if (StringUtils.isNotBlank(filters)) { + customFilter.append(" and ( "); + customFilter.append(MessageFormat.format(" {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.FIRST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.LAST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.MIDDLE_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.UNIQUE_ID, filters)); + + customFilter.append(" ) "); + } + + return customFilter.toString(); + } + + public String getRemovedChildFilterString(String filters) { + StringBuilder customFilter = new StringBuilder(); + if (StringUtils.isNotBlank(filters)) { + customFilter.append(" and ( "); + customFilter.append(MessageFormat.format(" {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.FIRST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.LAST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.MIDDLE_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.UNIQUE_ID, filters)); + + customFilter.append(" ) "); + } + + return customFilter.toString(); + } + + public String getOutAreaFilterString(String filters) { + StringBuilder customFilter = new StringBuilder(); + if (StringUtils.isNotBlank(filters)) { + customFilter.append(" ( "); + customFilter.append(MessageFormat.format(" {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_DEATH, CoreConstants.DB_CONSTANTS.NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_DEATH, org.smartregister.chw.anc.util.DBConstants.KEY.UNIQUE_ID, filters)); + + customFilter.append(" ) "); + } + + return customFilter.toString(); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/FamilyProfileModelFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/FamilyProfileModelFlv.java new file mode 100644 index 0000000000..d0e0127951 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/FamilyProfileModelFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.model; + +public class FamilyProfileModelFlv extends DefaultFamilyProfileModelFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/model/NavigationModelFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/NavigationModelFlv.java new file mode 100644 index 0000000000..c522801226 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/model/NavigationModelFlv.java @@ -0,0 +1,50 @@ +package org.smartregister.chw.model; + +import org.smartregister.chw.R; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.model.NavigationOption; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.CrvsConstants; + +import java.util.ArrayList; +import java.util.List; + +import static org.smartregister.chw.util.CrvsConstants.USER_TYPE; + +public class NavigationModelFlv extends DefaultNavigationModelFlv { + + private List navigationOptions = new ArrayList<>(); + + @Override + public List getNavigationItems() { + + if (navigationOptions.size() == 0) { + if (ChwApplication.getInstance().getContext().allSharedPreferences().getPreference(USER_TYPE).equals(CrvsConstants.USER)) { + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_families, R.mipmap.sidemenu_families_active, R.string.menu_all_families, Constants.DrawerMenu.ALL_FAMILIES, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_anc, R.mipmap.sidemenu_anc_active, R.string.menu_anc, Constants.DrawerMenu.ANC, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_pnc, R.mipmap.sidemenu_pnc_active, R.string.menu_pnc, Constants.DrawerMenu.PNC, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_children, R.mipmap.sidemenu_children_active, R.string.menu_child_clients, Constants.DrawerMenu.CHILD_CLIENTS, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_certification, R.mipmap.sidemenu_certification_active, R.string.birth_certification, Constants.DrawerMenu.BIRTH_NOTIFICATION, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_certification, R.mipmap.sidemenu_certification_active, R.string.death_certification, Constants.DrawerMenu.DEATH_NOTIFICATION, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_outofarea, R.mipmap.sidemenu_outofarea_active, R.string.out_of_area_registration, Constants.DrawerMenu.OUT_OF_AREA_CHILD, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_outofarea, R.mipmap.sidemenu_outofarea_active, R.string.out_of_area_death, Constants.DrawerMenu.OUT_OF_AREA_DEATH, 0)); + } else if (ChwApplication.getInstance().getContext().allSharedPreferences().getPreference(USER_TYPE).equals(CrvsConstants.AGENT)) { + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_certification, R.mipmap.sidemenu_certification_active, R.string.birth_certification, Constants.DrawerMenu.BIRTH_NOTIFICATION, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_certification, R.mipmap.sidemenu_certification_active, R.string.death_certification, Constants.DrawerMenu.DEATH_NOTIFICATION, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_outofarea, R.mipmap.sidemenu_outofarea_active, R.string.out_of_area_registration, Constants.DrawerMenu.OUT_OF_AREA_CHILD, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_outofarea, R.mipmap.sidemenu_outofarea_active, R.string.out_of_area_death, Constants.DrawerMenu.OUT_OF_AREA_DEATH, 0)); + } else { + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_families, R.mipmap.sidemenu_families_active, R.string.menu_all_families, Constants.DrawerMenu.ALL_FAMILIES, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_anc, R.mipmap.sidemenu_anc_active, R.string.menu_anc, Constants.DrawerMenu.ANC, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_pnc, R.mipmap.sidemenu_pnc_active, R.string.menu_pnc, Constants.DrawerMenu.PNC, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_children, R.mipmap.sidemenu_children_active, R.string.menu_child_clients, Constants.DrawerMenu.CHILD_CLIENTS, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_certification, R.mipmap.sidemenu_certification_active, R.string.birth_certification, Constants.DrawerMenu.BIRTH_NOTIFICATION, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_certification, R.mipmap.sidemenu_certification_active, R.string.death_certification, Constants.DrawerMenu.DEATH_NOTIFICATION, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_outofarea, R.mipmap.sidemenu_outofarea_active, R.string.out_of_area_registration, Constants.DrawerMenu.OUT_OF_AREA_CHILD, 0)); + navigationOptions.add(new NavigationOption(R.mipmap.sidemenu_outofarea, R.mipmap.sidemenu_outofarea_active, R.string.out_of_area_death, Constants.DrawerMenu.OUT_OF_AREA_DEATH, 0)); + } + } + + return navigationOptions; + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/BirthCertificationRegisterFragmentPresenter.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/BirthCertificationRegisterFragmentPresenter.java new file mode 100644 index 0000000000..159a88bbbb --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/BirthCertificationRegisterFragmentPresenter.java @@ -0,0 +1,117 @@ +package org.smartregister.chw.presenter; + +import org.apache.commons.lang3.StringUtils; +import org.smartregister.chw.core.contract.CoreCertificationRegisterFragmentContract; +import org.smartregister.chw.core.presenter.CoreCertificationRegisterFragmentPresenter; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.BirthCertificationRegisterFragmentModel; +import org.smartregister.family.util.DBConstants; + +import java.text.MessageFormat; + +public class BirthCertificationRegisterFragmentPresenter extends CoreCertificationRegisterFragmentPresenter { + + private CoreCertificationRegisterFragmentContract.Model model; + + public BirthCertificationRegisterFragmentPresenter(CoreCertificationRegisterFragmentContract.View view, CoreCertificationRegisterFragmentContract.Model model, String viewConfigurationIdentifier) { + super(view, model, viewConfigurationIdentifier); + this.model = model; + } + + @Override + public String getDueCondition() { + return " and birth_cert = 'Yes'"; + } + + @Override + public String getFilterString(String filters) { + StringBuilder customFilter = new StringBuilder(); + if (StringUtils.isNotBlank(filters)) { + customFilter.append(" and ( "); + customFilter.append(MessageFormat.format(" {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.FIRST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.LAST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.MIDDLE_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.FAMILY_MEMBER, org.smartregister.chw.anc.util.DBConstants.KEY.UNIQUE_ID, filters)); + + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.FIRST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.LAST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.MIDDLE_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.UNIQUE_ID, filters)); + + customFilter.append(" ) "); + } + + return customFilter.toString(); + } + + @Override + public String getOutOfCatchmentFilterString(String filters) { + StringBuilder customFilter = new StringBuilder(); + if (StringUtils.isNotBlank(filters)) { + customFilter.append(" and ( "); + customFilter.append(MessageFormat.format(" {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.FIRST_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.MIDDLE_NAME, filters)); + customFilter.append(MessageFormat.format(" or {0}.{1} like ''%{2}%'' ", CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_CHILD, org.smartregister.chw.anc.util.DBConstants.KEY.UNIQUE_ID, filters)); + + customFilter.append(" ) "); + } + + return customFilter.toString(); + } + + @Override + public String getDueFilterCondition() { + return " and birth_cert = 'Yes'"; + } + + @Override + public String getMainCondition() { + return String.format(" %s.%s is null AND %s", CoreConstants.TABLE_NAME.CHILD, DBConstants.KEY.DATE_REMOVED, ChildDBConstants.childAgeOnlyLimitFilter()); + } + + @Override + public String getMainCondition(String tableName) { + return String.format(" %s is null AND %s", tableName + "." + DBConstants.KEY.DATE_REMOVED, ChildDBConstants.childAgeOnlyLimitFilter()); + } + + public String getOutOfCatchmentMainCondition() { + return String.format(" %s", ChildDBConstants.outOfCatchmentChildAgeLimitFilter()); + } + + public String getOutOfCatchmentSortQueries() { + return DBConstants.KEY.LAST_INTERACTED_WITH + " DESC "; + } + + @Override + public String getDefaultSortQuery() { + return ""; //super.getDefaultSortQuery(); + } + + @Override + public void initializeQueries(String mainCondition) { + String countSelect = getCountSelectString(mainCondition) + getOutOfCatchmentSelectString(mainCondition); + String mainSelect = getMainSelectString(mainCondition) + getOutOfCatchmentSelectString(mainCondition); + + getView().initializeQueryParams(CoreConstants.TABLE_NAME.CHILD, countSelect, mainSelect); + getView().initializeAdapter(visibleColumns); + + getView().countExecute(); + getView().filterandSortInInitializeQueries(); + } + + @Override + public String getCountSelectString(String condition) { + return model.countSelect(CoreConstants.TABLE_NAME.CHILD, condition, CoreConstants.TABLE_NAME.FAMILY_MEMBER); + } + + @Override + public String getMainSelectString(String condition) { + return model.mainSelect(CoreConstants.TABLE_NAME.CHILD, CoreConstants.TABLE_NAME.FAMILY, CoreConstants.TABLE_NAME.FAMILY_MEMBER, condition); + } + + @Override + public String getOutOfCatchmentSelectString(String condition) { + return ((BirthCertificationRegisterFragmentModel) model).outOfAreaSelect(condition); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/CoreOutOfAreaChildRegisterPresenter.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/CoreOutOfAreaChildRegisterPresenter.java new file mode 100644 index 0000000000..d312bde17a --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/CoreOutOfAreaChildRegisterPresenter.java @@ -0,0 +1,236 @@ +package org.smartregister.chw.presenter; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.Pair; +import android.view.View; +import android.widget.Toast; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONObject; +import org.smartregister.chw.activity.OutOfAreaChildActivity; +import org.smartregister.chw.activity.OutOfAreaChildUpdateActivity; +import org.smartregister.chw.contract.CoreOutOfAreaChildRegisterContract; +import org.smartregister.chw.core.presenter.CoreChildRegisterPresenter; +import org.smartregister.chw.interactor.CoreOutOfAreaChildRegisterInteractor; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.Utils; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.domain.FetchStatus; +import org.smartregister.family.domain.FamilyEventClient; +import org.smartregister.family.model.BaseFamilyRegisterModel; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.repository.AllSharedPreferences; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.Objects; + +import timber.log.Timber; + +public class CoreOutOfAreaChildRegisterPresenter implements CoreOutOfAreaChildRegisterContract.Presenter, CoreOutOfAreaChildRegisterContract.InteractorCallBack { + public static final String TAG = CoreChildRegisterPresenter.class.getName(); + private WeakReference viewReference; + private CoreOutOfAreaChildRegisterContract.Interactor interactor; + private CoreOutOfAreaChildRegisterContract.Model model; + + public CoreOutOfAreaChildRegisterPresenter(CoreOutOfAreaChildRegisterContract.View view, CoreOutOfAreaChildRegisterContract.Model model) { + viewReference = new WeakReference<>(view); + interactor = new CoreOutOfAreaChildRegisterInteractor(Objects.requireNonNull(getView()).getContext()); + this.model = model; + } + + public void setModel(CoreOutOfAreaChildRegisterContract.Model model) { + this.model = model; + } + + public void setInteractor(CoreOutOfAreaChildRegisterContract.Interactor interactor) { + this.interactor = interactor; + } + + @Override + public void registerViewConfigurations(List viewIdentifiers) { + model.registerViewConfigurations(viewIdentifiers); + } + + @Override + public void unregisterViewConfiguration(List viewIdentifiers) { + model.unregisterViewConfiguration(viewIdentifiers); + } + + @Override + public void onDestroy(boolean isChangingConfiguration) { + + viewReference = null;//set to null on destroy + // Inform interactor + interactor.onDestroy(isChangingConfiguration); + // Activity destroyed set interactor to null + if (!isChangingConfiguration) { + interactor = null; + model = null; + } + } + + @Override + public void updateInitials() { + String initials = model.getInitials(); + if (initials != null && getView() != null) { + getView().updateInitialsText(initials); + } + } + + private CoreOutOfAreaChildRegisterContract.View getView() { + if (viewReference != null) { + return viewReference.get(); + } else { + return null; + } + } + + @Override + public void saveLanguage(String language) { + model.saveLanguage(language); + Objects.requireNonNull(getView()).displayToast(language + " selected"); + } + + @Override + public void startForm(String formName, String entityId, String metadata, String currentLocationId, String familyId) throws Exception { + + if (StringUtils.isBlank(entityId)) { + Triple triple = Triple.of(formName, metadata, currentLocationId); + interactor.getNextUniqueId(triple, this, familyId); + return; + } + if (TextUtils.isEmpty(familyId)) { + JSONObject form = new BaseFamilyRegisterModel().getFormAsJson(formName, entityId, currentLocationId); + if (getView() != null) + getView().startFormActivity(form); + } else { + JSONObject form = model.getFormAsJson(formName, entityId, currentLocationId, familyId); + if (getView() != null) + getView().startFormActivity(form); + } + } + + @Override + public void saveOutOfAreaForm(String jsonString, boolean isEditMode) { + + try { + if (getView() != null) + getView().showProgressDialog(org.smartregister.chw.core.R.string.saving_dialog_title); + JSONObject form = new JSONObject(jsonString); + if (form.getString(JsonFormUtils.ENCOUNTER_TYPE).equals(Constants.EncounterType.OUT_OF_AREA_CHILD_REGISTRATION)) { + + Pair clientEventPair = model.processRegistration(jsonString); + if (clientEventPair == null) { + return; + } + + new CoreOutOfAreaChildRegisterInteractor(getView().getContext()).saveRegistration(clientEventPair, jsonString, isEditMode, new CoreOutOfAreaChildRegisterContract.InteractorCallBack() { + @Override + public void onNoUniqueId() { + // Do nothing + } + + @Override + public void onUniqueIdFetched(Triple triple, String entityId, String familyId) { + // Do nothing + } + + @Override + public void onRegistrationSaved(boolean editMode, boolean isSaved, FamilyEventClient familyEventClient) { + getView().hideProgressDialog(); + getView().openFamilyListView(); + if (!isSaved && getView().getContext() != null) { + Toast.makeText(getView().getContext(), "Saving failed", Toast.LENGTH_SHORT).show(); + } else { + Utils.launchAndClearOldInstanceOfActivity(getView().getContext(), OutOfAreaChildActivity.class); + } + } + }); + + } else { + + Pair pair = model.processRegistration(jsonString); + if (pair == null) { + return; + } + + interactor.saveRegistration(pair, jsonString, isEditMode, this); + } + + + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + public void closeFamilyRecord(String jsonString) { + + try { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Objects.requireNonNull(getView()).getContext()); + AllSharedPreferences allSharedPreferences = new AllSharedPreferences(preferences); + + Timber.d("JSONResult : %s", jsonString); + + interactor.removeChildFromRegister(jsonString, allSharedPreferences.fetchRegisteredANM()); + + } catch (Exception e) { + Timber.e(e); + + } + } + + @Override + public void addOutOfAreaChild(Class activity) { + Intent intent = new Intent(Objects.requireNonNull(getView()).getContext(), OutOfAreaChildActivity.class); + getView().getContext().startActivity(intent); + } + + @SuppressLint("RestrictedApi") + @Override + public void registerFloatingActionButton(View v, int visibility) { + FloatingActionButton addClientsFab = v.findViewById(org.smartregister.chw.core.R.id.add_clients_fab); + addClientsFab.setVisibility(View.VISIBLE); + + addClientsFab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + interactor.openActivityOnFloatingButtonClick(Objects.requireNonNull(getView()).getContext(), OutOfAreaChildUpdateActivity.class); + } + }); + } + + @Override + public void onNoUniqueId() { + Objects.requireNonNull(getView()).displayShortToast(org.smartregister.chw.core.R.string.no_unique_id); + } + + @Override + public void onUniqueIdFetched(Triple triple, String entityId, String familyId) { + try { + startForm(triple.getLeft(), entityId, triple.getMiddle(), triple.getRight(), familyId); + } catch (Exception e) { + Timber.e(e); + if (getView() != null) + getView().displayToast(org.smartregister.chw.core.R.string.error_unable_to_start_form); + } + } + + @Override + public void onRegistrationSaved(boolean editMode, boolean isSaved, FamilyEventClient familyEventClient) { + if (getView() != null) { + getView().refreshList(FetchStatus.fetched); + getView().hideProgressDialog(); + } + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/CoreOutOfAreaDeathRegisterPresenter.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/CoreOutOfAreaDeathRegisterPresenter.java new file mode 100644 index 0000000000..de62deaa1d --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/CoreOutOfAreaDeathRegisterPresenter.java @@ -0,0 +1,234 @@ +package org.smartregister.chw.presenter; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.Pair; +import android.view.View; +import android.widget.Toast; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Triple; +import org.json.JSONObject; +import org.smartregister.chw.activity.OutOfAreaDeathActivity; +import org.smartregister.chw.activity.OutOfAreaDeathUpdateActivity; +import org.smartregister.chw.contract.CoreOutOfAreaDeathRegisterContract; +import org.smartregister.chw.core.presenter.CoreChildRegisterPresenter; +import org.smartregister.chw.interactor.CoreOutOfAreaDeathRegisterInteractor; +import org.smartregister.chw.util.Constants; +import org.smartregister.chw.util.Utils; +import org.smartregister.clientandeventmodel.Client; +import org.smartregister.clientandeventmodel.Event; +import org.smartregister.domain.FetchStatus; +import org.smartregister.family.domain.FamilyEventClient; +import org.smartregister.family.model.BaseFamilyRegisterModel; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.repository.AllSharedPreferences; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.Objects; + +import timber.log.Timber; + +public class CoreOutOfAreaDeathRegisterPresenter implements CoreOutOfAreaDeathRegisterContract.Presenter, CoreOutOfAreaDeathRegisterContract.InteractorCallBack { + public static final String TAG = CoreChildRegisterPresenter.class.getName(); + private WeakReference viewReference; + private CoreOutOfAreaDeathRegisterContract.Interactor interactor; + private CoreOutOfAreaDeathRegisterContract.Model model; + + public CoreOutOfAreaDeathRegisterPresenter(CoreOutOfAreaDeathRegisterContract.View view, CoreOutOfAreaDeathRegisterContract.Model model) { + viewReference = new WeakReference<>(view); + interactor = new CoreOutOfAreaDeathRegisterInteractor(Objects.requireNonNull(getView()).getContext()); + this.model = model; + } + + public void setModel(CoreOutOfAreaDeathRegisterContract.Model model) { + this.model = model; + } + + public void setInteractor(CoreOutOfAreaDeathRegisterContract.Interactor interactor) { + this.interactor = interactor; + } + + @Override + public void registerViewConfigurations(List viewIdentifiers) { + model.registerViewConfigurations(viewIdentifiers); + } + + @Override + public void unregisterViewConfiguration(List viewIdentifiers) { + model.unregisterViewConfiguration(viewIdentifiers); + } + + @Override + public void onDestroy(boolean isChangingConfiguration) { + + viewReference = null;//set to null on destroy + // Inform interactor + interactor.onDestroy(isChangingConfiguration); + // Activity destroyed set interactor to null + if (!isChangingConfiguration) { + interactor = null; + model = null; + } + } + + @Override + public void updateInitials() { + String initials = model.getInitials(); + if (initials != null && getView() != null) { + getView().updateInitialsText(initials); + } + } + + private CoreOutOfAreaDeathRegisterContract.View getView() { + if (viewReference != null) { + return viewReference.get(); + } else { + return null; + } + } + + @Override + public void saveLanguage(String language) { + model.saveLanguage(language); + Objects.requireNonNull(getView()).displayToast(language + " selected"); + } + + @Override + public void startForm(String formName, String entityId, String metadata, String currentLocationId, String familyId) throws Exception { + + if (StringUtils.isBlank(entityId)) { + Triple triple = Triple.of(formName, metadata, currentLocationId); + interactor.getNextUniqueId(triple, this, familyId); + return; + } + if (TextUtils.isEmpty(familyId)) { + JSONObject form = new BaseFamilyRegisterModel().getFormAsJson(formName, entityId, currentLocationId); + if (getView() != null) + getView().startFormActivity(form); + } else { + JSONObject form = model.getFormAsJson(formName, entityId, currentLocationId, familyId); + if (getView() != null) + getView().startFormActivity(form); + } + } + + @Override + public void saveOutOfAreaDeathForm(String jsonString, boolean isEditMode) { + + try { + + if (getView() != null) + getView().showProgressDialog(org.smartregister.chw.core.R.string.saving_dialog_title); + JSONObject form = new JSONObject(jsonString); + if (form.getString(JsonFormUtils.ENCOUNTER_TYPE).equals(Constants.EncounterType.OUT_OF_AREA_DEATH_REGISTRATION)) { + + Pair fevent = model.processRegistration(jsonString); + if (fevent == null) { + return; + } + + new CoreOutOfAreaDeathRegisterInteractor(getView().getContext()).saveRegistration(fevent, jsonString, isEditMode, new CoreOutOfAreaDeathRegisterContract.InteractorCallBack() { + @Override + public void onNoUniqueId() { + // Do nothing + } + + @Override + public void onUniqueIdFetched(Triple triple, String entityId, String familyId) { + // Do nothing + } + + @Override + public void onRegistrationSaved(boolean editMode, boolean isSaved, FamilyEventClient familyEventClient) { + getView().hideProgressDialog(); + getView().openFamilyListView(); + if (!isSaved && getView().getContext() != null) { + Toast.makeText(getView().getContext(), "Saving failed", Toast.LENGTH_SHORT).show(); + } else { + Utils.launchAndClearOldInstanceOfActivity(getView().getContext(), OutOfAreaDeathActivity.class); + } + } + }); + + } else { + + Pair pair = model.processRegistration(jsonString); + if (pair == null) { + return; + } + + interactor.saveRegistration(pair, jsonString, isEditMode, this); + } + + + } catch (Exception e) { + Timber.e(e); + } + } + + @Override + public void closeFamilyRecord(String jsonString) { + + try { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Objects.requireNonNull(getView()).getContext()); + AllSharedPreferences allSharedPreferences = new AllSharedPreferences(preferences); + + Timber.d("JSONResult : %s", jsonString); + + interactor.removeChildFromRegister(jsonString, allSharedPreferences.fetchRegisteredANM()); + + } catch (Exception e) { + Timber.e(e); + + } + } + + @Override + public void addOutOfAreaChild(Class activity) { + Intent intent = new Intent(Objects.requireNonNull(getView()).getContext(), OutOfAreaDeathActivity.class); + getView().getContext().startActivity(intent); + } + + @SuppressLint("RestrictedApi") + @Override + public void registerFloatingActionButton(View v, int visibility) { + FloatingActionButton addClientsFab = v.findViewById(org.smartregister.chw.core.R.id.add_clients_fab); + addClientsFab.setVisibility(View.VISIBLE); + /*if (addClientsFab != null) + addClientsFab.setImageResource(R.drawable.ic_add);*/ + + addClientsFab.setOnClickListener(view -> interactor.openActivityOnFloatingButtonClick(Objects.requireNonNull(getView()).getContext(), OutOfAreaDeathUpdateActivity.class)); + } + + @Override + public void onNoUniqueId() { + Objects.requireNonNull(getView()).displayShortToast(org.smartregister.chw.core.R.string.no_unique_id); + } + + @Override + public void onUniqueIdFetched(Triple triple, String entityId, String familyId) { + try { + startForm(triple.getLeft(), entityId, triple.getMiddle(), triple.getRight(), familyId); + } catch (Exception e) { + Timber.e(e); + if (getView() != null) + getView().displayToast(org.smartregister.chw.core.R.string.error_unable_to_start_form); + } + } + + @Override + public void onRegistrationSaved(boolean editMode, boolean isSaved, FamilyEventClient familyEventClient) { + if (getView() != null) { + getView().refreshList(FetchStatus.fetched); + getView().hideProgressDialog(); + } + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/DeathCertificationRegisterFragmentPresenter.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/DeathCertificationRegisterFragmentPresenter.java new file mode 100644 index 0000000000..1079dccc32 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/DeathCertificationRegisterFragmentPresenter.java @@ -0,0 +1,79 @@ +package org.smartregister.chw.presenter; + +import org.smartregister.chw.core.contract.CoreCertificationRegisterFragmentContract; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.presenter.CoreCertificationRegisterFragmentPresenter; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.DeathCertificationRegisterFragmentModel; +import org.smartregister.family.util.DBConstants; + +public class DeathCertificationRegisterFragmentPresenter extends CoreCertificationRegisterFragmentPresenter { + + private CoreCertificationRegisterFragmentContract.Model model; + + public DeathCertificationRegisterFragmentPresenter(CoreCertificationRegisterFragmentContract.View view, CoreChildRegisterFragmentContract.Model model, String viewConfigurationIdentifier) { + super(view, model, viewConfigurationIdentifier); + this.model = model; + } + + @Override + public String getDueCondition() { + return " and received_death_certificate = 'Yes'"; + } + + @Override + public String getFilterString(String filters) { + return ""; // Defined in Model + } + + @Override + public String getDueFilterCondition() { + return " and received_death_certificate = 'Yes'"; + } + + @Override + public String getMainCondition() { + return ""; // Defined in Model + } + + @Override + public String getMainCondition(String tableName) { + return ""; + } + + + public String getOutOfCatchmentSortQueries() { + return DBConstants.KEY.LAST_INTERACTED_WITH + " DESC "; + } + + @Override + public String getDefaultSortQuery() { + return ""; //super.getDefaultSortQuery(); + } + + @Override + public void initializeQueries(String mainCondition) { + String countSelect = getCountSelectString(mainCondition); + String mainSelect = getMainSelectString(mainCondition); + + getView().initializeQueryParams(CoreConstants.TABLE_NAME.FAMILY_MEMBER, countSelect, mainSelect); + getView().initializeAdapter(visibleColumns); + + getView().countExecute(); + getView().filterandSortInInitializeQueries(); + } + + @Override + public String getCountSelectString(String condition) { + return model.countSelect("", condition, CoreConstants.TABLE_NAME.FAMILY_MEMBER); + } + + @Override + public String getMainSelectString(String condition) { + return model.mainSelect("", CoreConstants.TABLE_NAME.FAMILY, CoreConstants.TABLE_NAME.FAMILY_MEMBER, condition); + } + + public String getCustomSelectString(String condition, String filters, String SortQueries, boolean isDueActive) { + return ((DeathCertificationRegisterFragmentModel) model).getCustomSelectString(condition, filters, SortQueries, isDueActive); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/OutOfAreaChildFragmentPresenter.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/OutOfAreaChildFragmentPresenter.java new file mode 100644 index 0000000000..735c2a035c --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/OutOfAreaChildFragmentPresenter.java @@ -0,0 +1,115 @@ +package org.smartregister.chw.presenter; + +import org.apache.commons.lang3.StringUtils; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.CoreOutOfAreaFragmentModel; +import org.smartregister.configurableviews.model.Field; +import org.smartregister.configurableviews.model.RegisterConfiguration; +import org.smartregister.configurableviews.model.View; +import org.smartregister.configurableviews.model.ViewConfiguration; +import org.smartregister.family.util.DBConstants; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +public class OutOfAreaChildFragmentPresenter implements CoreChildRegisterFragmentContract.Presenter { + + + protected Set visibleColumns = new TreeSet<>(); + private WeakReference viewReference; + private CoreChildRegisterFragmentContract.Model model; + private RegisterConfiguration config; + private String viewConfigurationIdentifier; + + public OutOfAreaChildFragmentPresenter(CoreChildRegisterFragmentContract.View view, CoreOutOfAreaFragmentModel model, String viewConfigurationIdentifier) { + this.viewReference = new WeakReference<>(view); + this.model = model; + this.viewConfigurationIdentifier = viewConfigurationIdentifier; + this.config = model.defaultRegisterConfiguration(); + } + + @Override + public void processViewConfigurations() { + if (StringUtils.isBlank(viewConfigurationIdentifier)) { + return; + } + + ViewConfiguration viewConfiguration = model.getViewConfiguration(viewConfigurationIdentifier); + if (viewConfiguration != null) { + config = (RegisterConfiguration) viewConfiguration.getMetadata(); + visibleColumns = model.getRegisterActiveColumns(viewConfigurationIdentifier); + } + + if (config.getSearchBarText() != null && getView() != null) { + getView().updateSearchBarHint(getView().getContext().getString(org.smartregister.chw.core.R.string.search_name_or_id)); + } + } + + @Override + public void initializeQueries(String mainCondition) { + String countSelect = model.countSelect(CoreConstants.TABLE_NAME.CHILD, mainCondition, CoreConstants.TABLE_NAME.FAMILY_MEMBER); + String mainSelect = model.mainSelect(CoreConstants.TABLE_NAME.CHILD, CoreConstants.TABLE_NAME.FAMILY, CoreConstants.TABLE_NAME.FAMILY_MEMBER, mainCondition); + + getView().initializeQueryParams(CoreConstants.TABLE_NAME.CHILD, countSelect, mainSelect); + getView().initializeAdapter(visibleColumns); + + getView().countExecute(); + getView().filterandSortInInitializeQueries(); + } + + @Override + public void startSync() { + // Do nothing + } + + @Override + public void searchGlobally(String uniqueId) { + // TODO implement search global + } + + protected CoreChildRegisterFragmentContract.View getView() { + if (viewReference != null) { + return viewReference.get(); + } else { + return null; + } + } + + @Override + public void updateSortAndFilter(List filterList, Field sortField) { + String filterText = model.getFilterText(filterList, getView().getString(org.smartregister.R.string.filter)); + String sortText = model.getSortText(sortField); + + getView().updateFilterAndFilterStatus(filterText, sortText); + } + + @Override + public String getMainCondition() { + return " " + "ec_out_of_area_child" + "." + org.smartregister.chw.anc.util.DBConstants.KEY.IS_CLOSED + " is 0 "; + } + + @Override + public String getMainCondition(String tableName) { + if (ChwApplication.getApplicationFlavor().dueVaccinesFilterInChildRegister()) + return String.format(" %s is null AND %s", tableName + "." + DBConstants.KEY.DATE_REMOVED, org.smartregister.chw.util.ChildDBConstants.childDueVaccinesFilterForChildrenBelowTwoAndGirlsAgeNineToEleven(tableName)); + return getMainCondition(tableName); + } + + @Override + public String getDefaultSortQuery() { + return " MAX(ec_out_of_area_child.last_interacted_with , 0 DESC "; + } + + @Override + public String getDueFilterCondition() { + return ""; + } + + public void setModel(CoreChildRegisterFragmentContract.Model model) { + this.model = model; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/OutOfAreaDeathFragmentPresenter.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/OutOfAreaDeathFragmentPresenter.java new file mode 100644 index 0000000000..71cdcd612d --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/presenter/OutOfAreaDeathFragmentPresenter.java @@ -0,0 +1,115 @@ +package org.smartregister.chw.presenter; + +import org.apache.commons.lang3.StringUtils; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.contract.CoreChildRegisterFragmentContract; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.model.CoreOutOfAreaDeathFragmentModel; +import org.smartregister.configurableviews.model.Field; +import org.smartregister.configurableviews.model.RegisterConfiguration; +import org.smartregister.configurableviews.model.View; +import org.smartregister.configurableviews.model.ViewConfiguration; +import org.smartregister.family.util.DBConstants; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +public class OutOfAreaDeathFragmentPresenter implements CoreChildRegisterFragmentContract.Presenter { + + + protected Set visibleColumns = new TreeSet<>(); + private WeakReference viewReference; + private CoreChildRegisterFragmentContract.Model model; + private RegisterConfiguration config; + private String viewConfigurationIdentifier; + + public OutOfAreaDeathFragmentPresenter(CoreChildRegisterFragmentContract.View view, CoreOutOfAreaDeathFragmentModel model, String viewConfigurationIdentifier) { + this.viewReference = new WeakReference<>(view); + this.model = model; + this.viewConfigurationIdentifier = viewConfigurationIdentifier; + this.config = model.defaultRegisterConfiguration(); + } + + @Override + public void processViewConfigurations() { + if (StringUtils.isBlank(viewConfigurationIdentifier)) { + return; + } + + ViewConfiguration viewConfiguration = model.getViewConfiguration(viewConfigurationIdentifier); + if (viewConfiguration != null) { + config = (RegisterConfiguration) viewConfiguration.getMetadata(); + visibleColumns = model.getRegisterActiveColumns(viewConfigurationIdentifier); + } + + if (config.getSearchBarText() != null && getView() != null) { + getView().updateSearchBarHint(getView().getContext().getString(org.smartregister.chw.core.R.string.search_name_or_id)); + } + } + + @Override + public void initializeQueries(String mainCondition) { + String countSelect = model.countSelect("ec_out_of_area_death", mainCondition, CoreConstants.TABLE_NAME.FAMILY_MEMBER); + String mainSelect = model.mainSelect("ec_out_of_area_death", CoreConstants.TABLE_NAME.FAMILY, CoreConstants.TABLE_NAME.FAMILY_MEMBER, mainCondition); + + getView().initializeQueryParams("ec_out_of_area_death", countSelect, mainSelect); + getView().initializeAdapter(visibleColumns); + + getView().countExecute(); + getView().filterandSortInInitializeQueries(); + } + + @Override + public void startSync() { + //ServiceTools.startSyncService(getActivity()); + } + + @Override + public void searchGlobally(String uniqueId) { + // TODO implement search global + } + + protected CoreChildRegisterFragmentContract.View getView() { + if (viewReference != null) { + return viewReference.get(); + } else { + return null; + } + } + + @Override + public void updateSortAndFilter(List filterList, Field sortField) { + String filterText = model.getFilterText(filterList, getView().getString(org.smartregister.R.string.filter)); + String sortText = model.getSortText(sortField); + + getView().updateFilterAndFilterStatus(filterText, sortText); + } + + @Override + public String getMainCondition() { + return " " + "ec_out_of_area_death" + "." + org.smartregister.chw.anc.util.DBConstants.KEY.IS_CLOSED + " is 0 "; + } + + @Override + public String getMainCondition(String tableName) { + if (ChwApplication.getApplicationFlavor().dueVaccinesFilterInChildRegister()) + return String.format(" %s is null AND %s", tableName + "." + DBConstants.KEY.DATE_REMOVED, org.smartregister.chw.util.ChildDBConstants.childDueVaccinesFilterForChildrenBelowTwoAndGirlsAgeNineToEleven(tableName)); + return getMainCondition(tableName); + } + + @Override + public String getDefaultSortQuery() { + return " MAX(ec_out_of_area_death.last_interacted_with , 0 DESC "; + } + + @Override + public String getDueFilterCondition() { + return ""; + } + + public void setModel(CoreChildRegisterFragmentContract.Model model) { + this.model = model; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/BirthCertificationRegisterProvider.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/BirthCertificationRegisterProvider.java new file mode 100644 index 0000000000..efe686a423 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/BirthCertificationRegisterProvider.java @@ -0,0 +1,80 @@ +package org.smartregister.chw.provider; + +import static org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT; +import static org.smartregister.chw.util.ChildDBConstants.KEY.BIRTH_REGISTRATION; +import static org.smartregister.chw.util.CrvsConstants.NO; +import static org.smartregister.chw.util.CrvsConstants.YES; + +import android.content.Context; +import android.database.Cursor; +import android.view.View; +import android.widget.Button; + +import org.smartregister.chw.R; +import org.smartregister.chw.core.holders.RegisterViewHolder; +import org.smartregister.chw.core.provider.CoreCertificationRegisterProvider; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.family.util.Utils; +import org.smartregister.view.contract.SmartRegisterClient; + +import java.util.Set; + +/** + * Created by Allan + */ + +public class BirthCertificationRegisterProvider extends CoreCertificationRegisterProvider { + + private Set visibleColumns; + + private View.OnClickListener onClickListener; + + private Context context; + + public BirthCertificationRegisterProvider(Context context, Set visibleColumns, View.OnClickListener onClickListener, View.OnClickListener paginationClickListener) { + super(context, visibleColumns, onClickListener, paginationClickListener); + this.visibleColumns = visibleColumns; + this.onClickListener = onClickListener; + this.context = context; + } + + @Override + public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolder viewHolder) { + CommonPersonObjectClient pc = (CommonPersonObjectClient) client; + if (visibleColumns.isEmpty()) { + populatePatientColumn(pc, client, viewHolder); + populateLastColumn(pc, viewHolder); + } + } + + private void populateLastColumn(CommonPersonObjectClient pc, RegisterViewHolder viewHolder) { + Button viewHolderDueBtn = viewHolder.dueButton; + if (pc != null) { + viewHolder.dueButton.setVisibility(View.VISIBLE); + String certificateReceived = Utils.getValue(pc.getColumnmaps(), BIRTH_CERT, true); + String birthRegistrationDone = Utils.getValue(pc.getColumnmaps(), BIRTH_REGISTRATION, true); + if (YES.equalsIgnoreCase(certificateReceived)) { + setReceivedButtonColor(context, viewHolderDueBtn); + } else if (NO.equalsIgnoreCase(certificateReceived)) { + setNotReceivedButtonColor(context, viewHolderDueBtn); + } else { + setUpdateStatusButtonColor(context, viewHolderDueBtn); + } + } else { + viewHolderDueBtn.setVisibility(View.GONE); + } + } + + @Override + public void setReceivedButtonColor(Context context, Button dueButton) { + updateButton(dueButton, context.getString(R.string.birth_certificate_received), + context.getResources().getColor(R.color.certificate_received_green), 0); + } + + @Override + public void setNotReceivedButtonColor(Context context, Button dueButton) { + updateButton(dueButton, context.getString(org.smartregister.chw.core.R.string.birth_certificate_not_received), + context.getResources().getColor(org.smartregister.chw.core.R.color.certificate_not_received_red), 0); + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/DeathCertificationRegisterProvider.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/DeathCertificationRegisterProvider.java new file mode 100644 index 0000000000..611ea22539 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/DeathCertificationRegisterProvider.java @@ -0,0 +1,169 @@ +package org.smartregister.chw.provider; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.RECEIVED_DEATH_CERTIFICATE; +import static org.smartregister.chw.core.utils.Utils.getDuration; +import static org.smartregister.chw.util.Constants.PRENANCY_OUTCOME; +import static org.smartregister.chw.util.CrvsConstants.NO; +import static org.smartregister.chw.util.CrvsConstants.YES; +import static org.smartregister.chw.util.Utils.getClientName; + +import android.content.Context; +import android.database.Cursor; +import android.view.View; +import android.widget.Button; + +import org.apache.commons.lang3.text.WordUtils; +import org.smartregister.chw.R; +import org.smartregister.chw.anc.util.Constants; +import org.smartregister.chw.core.holders.RegisterViewHolder; +import org.smartregister.chw.core.provider.CoreCertificationRegisterProvider; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.Utils; +import org.smartregister.view.contract.SmartRegisterClient; + +import java.util.Set; + +import timber.log.Timber; + +public class DeathCertificationRegisterProvider extends CoreCertificationRegisterProvider { + + private Set visibleColumns; + + private View.OnClickListener onClickListener; + + private Context context; + + public DeathCertificationRegisterProvider(Context context, Set visibleColumns, View.OnClickListener onClickListener, View.OnClickListener paginationClickListener) { + super(context, visibleColumns, onClickListener, paginationClickListener); + this.visibleColumns = visibleColumns; + this.onClickListener = onClickListener; + this.context = context; + } + + @Override + public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolder viewHolder) { + CommonPersonObjectClient pc = (CommonPersonObjectClient) client; + if (visibleColumns.isEmpty()) { + populatePatientColumn(pc, client, viewHolder); + populateLastColumn(pc, viewHolder); + } + } + + protected void populatePatientColumn(CommonPersonObjectClient pc, SmartRegisterClient client, RegisterViewHolder viewHolder) { + try { + String parentFirstName = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_FIRST_NAME, true); + String parentLastName = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_LAST_NAME, true); + String parentMiddleName = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_MIDDLE_NAME, true); + + String dobString = getDuration(Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.DOB, false)); + String firstName = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.FIRST_NAME, true); + String middleName = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.MIDDLE_NAME, true); + String lastName = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.LAST_NAME, true); + String stillBirth = Utils.getValue(pc.getColumnmaps(), PRENANCY_OUTCOME, true); + String clientType = Utils.getValue(pc.getColumnmaps(), CLIENT_TYPE, false); + String childName = getClientName(firstName, middleName, lastName); + + switch (clientType) { + case Constants.TABLES.PREGNANCY_OUTCOME: { + String parentName = context.getResources().getString(R.string.care_giver_initials) + ": " + getClientName(parentFirstName, parentMiddleName, parentLastName) + ", [" + context.getString(R.string.stillbirth) + "]"; + fillValue(viewHolder.textViewParentName, WordUtils.capitalize(parentName)); + String address = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_HOME_ADDRESS, true); + fillValue(viewHolder.textViewAddressGender, address); + break; + } + case CoreConstants.TABLE_NAME.FAMILY_MEMBER: { + viewHolder.textViewChildName.setVisibility(View.GONE); + viewHolder.textViewChildAge.setVisibility(View.GONE); + String age = WordUtils.capitalize(Utils.getTranslatedDate(dobString, context)); + String parentName = getClientName(parentFirstName, parentMiddleName, parentLastName); + fillValue(viewHolder.textViewParentName, WordUtils.capitalize(parentName) + ", " + age); + String address = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_HOME_ADDRESS, true); + String gender_key = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.GENDER, true); + String gender = ""; + if (gender_key.equalsIgnoreCase("Male") || gender_key.equalsIgnoreCase("Masculin")) { + gender = context.getString(org.smartregister.chw.core.R.string.male); + } else if (gender_key.equalsIgnoreCase("Female") || gender_key.equalsIgnoreCase("Feminin")) { + gender = context.getString(org.smartregister.chw.core.R.string.female); + } + fillValue(viewHolder.textViewAddressGender, address + " \u00B7 " + gender); + break; + } + case Constants.TABLES.EC_CHILD: { + String parentName = context.getResources().getString(R.string.care_giver_initials) + ": " + getClientName(parentFirstName, parentMiddleName, parentLastName); + fillValue(viewHolder.textViewParentName, WordUtils.capitalize(parentName)); + String age = WordUtils.capitalize(Utils.getTranslatedDate(dobString, context)); + fillValue(viewHolder.textViewChildName, WordUtils.capitalize(childName) + ", " + age); + String address = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_HOME_ADDRESS, true); + String gender_key = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.GENDER, true); + String gender = ""; + if (gender_key.equalsIgnoreCase("Male") || gender_key.equalsIgnoreCase("Masculin")) { + gender = context.getString(org.smartregister.chw.core.R.string.male); + } else if (gender_key.equalsIgnoreCase("Female") || gender_key.equalsIgnoreCase("Feminin")) { + gender = context.getString(org.smartregister.chw.core.R.string.female); + } + fillValue(viewHolder.textViewAddressGender, address + " \u00B7 " + gender); + break; + } + case CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_DEATH: { + viewHolder.textViewChildName.setVisibility(View.GONE); + viewHolder.textViewChildAge.setVisibility(View.GONE); + + String age = WordUtils.capitalize(Utils.getTranslatedDate(dobString, context)); + String personName = firstName; + fillValue(viewHolder.textViewParentName, WordUtils.capitalize(personName) + ", " + age); + String address = Utils.getValue(pc.getColumnmaps(), ChildDBConstants.KEY.FAMILY_HOME_ADDRESS, true); + String gender_key = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.GENDER, true); + String gender = ""; + if (gender_key.equalsIgnoreCase("Male") || gender_key.equalsIgnoreCase("Masculin")) { + gender = context.getString(org.smartregister.chw.core.R.string.male); + } else if (gender_key.equalsIgnoreCase("Female") || gender_key.equalsIgnoreCase("Feminin")) { + gender = context.getString(org.smartregister.chw.core.R.string.female); + } + fillValue(viewHolder.textViewAddressGender, address + " \u00B7 " + gender); + break; + } + default: + Timber.log(0, "Patient column not updated"); + break; + } + + addStatusButtonClickListener(client, viewHolder); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void populateLastColumn(CommonPersonObjectClient pc, RegisterViewHolder viewHolder) { + Button viewHolderDueBtn = viewHolder.dueButton; + if (pc != null) { + viewHolder.dueButton.setVisibility(View.VISIBLE); + String received_death_certificate = Utils.getValue(pc.getColumnmaps(), RECEIVED_DEATH_CERTIFICATE, false); + if (YES.equalsIgnoreCase(received_death_certificate)) { + setReceivedButtonColor(context, viewHolderDueBtn); + } else if (NO.equalsIgnoreCase(received_death_certificate)) { + setNotReceivedButtonColor(context, viewHolderDueBtn); + } else { + setUpdateStatusButtonColor(context, viewHolderDueBtn); + } + } else { + viewHolderDueBtn.setVisibility(View.GONE); + } + } + + @Override + public void setReceivedButtonColor(Context context, Button dueButton) { + updateButton(dueButton, context.getString(R.string.death_certificate_received), + context.getResources().getColor(R.color.certificate_received_green), 0); + } + + @Override + public void setNotReceivedButtonColor(Context context, Button dueButton) { + updateButton(dueButton, context.getString(org.smartregister.chw.core.R.string.death_certificate_not_received), + context.getResources().getColor(org.smartregister.chw.core.R.color.certificate_not_received_red), 0); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/OutOfAreaDeathProvider.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/OutOfAreaDeathProvider.java new file mode 100644 index 0000000000..fd0e363475 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/OutOfAreaDeathProvider.java @@ -0,0 +1,195 @@ +package org.smartregister.chw.provider; + +import static org.smartregister.chw.core.utils.Utils.getDuration; + +import android.content.Context; +import android.database.Cursor; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import org.apache.commons.lang3.text.WordUtils; +import org.smartregister.chw.R; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.holders.FooterViewHolder; +import org.smartregister.chw.core.holders.RegisterViewHolder; +import org.smartregister.chw.task.OutOfAreaDeathAsyncTask; +import org.smartregister.chw.util.CrvsConstants; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.commonregistry.CommonRepository; +import org.smartregister.cursoradapter.RecyclerViewProvider; +import org.smartregister.family.fragment.BaseFamilyRegisterFragment; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.Utils; +import org.smartregister.view.contract.SmartRegisterClient; +import org.smartregister.view.contract.SmartRegisterClients; +import org.smartregister.view.dialog.FilterOption; +import org.smartregister.view.dialog.ServiceModeOption; +import org.smartregister.view.dialog.SortOption; +import org.smartregister.view.viewholder.OnClickFormLauncher; + +import java.text.MessageFormat; +import java.util.Set; + +public class OutOfAreaDeathProvider implements RecyclerViewProvider { + public final LayoutInflater inflater; + private Set visibleColumns; + private View.OnClickListener onClickListener; + private View.OnClickListener paginationClickListener; + private Context context; + private CommonRepository commonRepository; + + public OutOfAreaDeathProvider(Context context, CommonRepository commonRepository, Set visibleColumns, View.OnClickListener onClickListener, View.OnClickListener paginationClickListener) { + inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.visibleColumns = visibleColumns; + this.onClickListener = onClickListener; + this.paginationClickListener = paginationClickListener; + this.context = context; + this.commonRepository = commonRepository; + } + + protected static void fillValue(TextView v, String value) { + if (v != null) { + v.setText(value); + } + } + + @Override + public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolder viewHolder) { + CommonPersonObjectClient pc = (CommonPersonObjectClient) client; + if (visibleColumns.isEmpty()) { + populatePatientColumn(pc, client, viewHolder); + populateLastColumn(pc, viewHolder); + } + } + + private void populateLastColumn(CommonPersonObjectClient pc, RegisterViewHolder viewHolder) { + Utils.startAsyncTask(new OutOfAreaDeathAsyncTask(context, commonRepository, viewHolder, pc, onClickListener), null); + } + + private int getChildRegisterLayout() { + return !ChwApplication.getApplicationFlavor().prioritizeChildNameOnChildRegister() ? R.layout.adapter_child_register_list_row : R.layout.adapter_prioritize_child_register_list_row; + } + + @Override + public void getFooterView(RecyclerView.ViewHolder viewHolder, int currentPageCount, int totalPageCount, boolean hasNext, boolean hasPrevious) { + FooterViewHolder footerViewHolder = (FooterViewHolder) viewHolder; + footerViewHolder.pageInfoView.setText( + MessageFormat.format(context.getString(org.smartregister.R.string.str_page_info), currentPageCount, + totalPageCount)); + + footerViewHolder.nextPageView.setVisibility(hasNext ? View.VISIBLE : View.INVISIBLE); + footerViewHolder.previousPageView.setVisibility(hasPrevious ? View.VISIBLE : View.INVISIBLE); + + footerViewHolder.nextPageView.setOnClickListener(paginationClickListener); + footerViewHolder.previousPageView.setOnClickListener(paginationClickListener); + } + + @Override + public SmartRegisterClients updateClients(FilterOption villageFilter, ServiceModeOption serviceModeOption, FilterOption searchFilter, SortOption sortOption) { + return null; + } + + @Override + public void onServiceModeSelected(ServiceModeOption serviceModeOption) {//Implement Abstract Method + } + + @Override + public OnClickFormLauncher newFormLauncher(String formName, String entityId, String metaData) { + return null; + } + + @Override + public LayoutInflater inflater() { + return inflater; + } + + @Override + public RegisterViewHolder createViewHolder(ViewGroup parent) { + View view = inflater.inflate(getChildRegisterLayout(), parent, false); + return new RegisterViewHolder(view); + } + + @Override + public RecyclerView.ViewHolder createFooterHolder(ViewGroup parent) { + View view = inflater.inflate(org.smartregister.chw.core.R.layout.smart_register_pagination, parent, false); + return new FooterViewHolder(view); + } + + @Override + public boolean isFooterViewHolder(RecyclerView.ViewHolder viewHolder) { + return viewHolder instanceof FooterViewHolder; + } + + protected void populatePatientColumn(CommonPersonObjectClient pc, SmartRegisterClient client, RegisterViewHolder viewHolder) { + try { + StringBuilder name = new StringBuilder(); + name.append("Name: ").append(Utils.getValue(pc.getColumnmaps(), "name", true)); + if (Utils.getValue(pc.getColumnmaps(), CrvsConstants.STILL_BORN_DEATH, false).equalsIgnoreCase("Yes")) { + name.append(", [StillBirth]"); + } + fillValue(viewHolder.textViewParentName, WordUtils.capitalize(name.toString())); + String dobString = getDuration(Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.DOB, false)); + String age = "Age at death: " + WordUtils.capitalize(Utils.getTranslatedDate(dobString, context)); + fillValue(viewHolder.textViewChildName, age); + String marital_status = Utils.getValue(pc.getColumnmaps(), "marital_status", true); + fillValue(viewHolder.textViewAddressGender, "Marital status: " + marital_status); + } catch (Exception e) { + e.printStackTrace(); + } + + addButtonClickListeners(client, viewHolder); + + } + + public void addButtonClickListeners(SmartRegisterClient client, RegisterViewHolder viewHolder) { + View patient = viewHolder.childColumn; + attachPatientOnclickListener(patient, client); + + View dueButton = viewHolder.dueButton; + attachDosageOnclickListener(dueButton, client); + } + + protected void attachPatientOnclickListener(View view, SmartRegisterClient client) { + view.setOnClickListener(onClickListener); + view.setTag(client); + view.setTag(org.smartregister.chw.core.R.id.VIEW_ID, BaseFamilyRegisterFragment.CLICK_VIEW_NORMAL); + } + + protected void attachDosageOnclickListener(View view, SmartRegisterClient client) { + view.setOnClickListener(onClickListener); + view.setTag(client); + view.setTag(org.smartregister.chw.core.R.id.VIEW_ID, BaseFamilyRegisterFragment.CLICK_VIEW_DOSAGE_STATUS); + } + + public LayoutInflater getInflater() { + return inflater; + } + + public View.OnClickListener getOnClickListener() { + return onClickListener; + } + + public void setOnClickListener(View.OnClickListener onClickListener) { + this.onClickListener = onClickListener; + } + + public View.OnClickListener getPaginationClickListener() { + return paginationClickListener; + } + + public void setPaginationClickListener(View.OnClickListener paginationClickListener) { + this.paginationClickListener = paginationClickListener; + } + + public Context getContext() { + return context; + } + + public void setContext(Context context) { + this.context = context; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/OutOfAreaProvider.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/OutOfAreaProvider.java new file mode 100644 index 0000000000..4f69b89c38 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/provider/OutOfAreaProvider.java @@ -0,0 +1,170 @@ +package org.smartregister.chw.provider; + +import android.content.Context; +import android.database.Cursor; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; +import org.apache.commons.lang3.text.WordUtils; +import org.smartregister.chw.R; +import org.smartregister.chw.application.ChwApplication; +import org.smartregister.chw.core.holders.FooterViewHolder; +import org.smartregister.chw.core.holders.RegisterViewHolder; +import org.smartregister.chw.task.OutOfAreaChildAsyncTask; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.commonregistry.CommonRepository; +import org.smartregister.cursoradapter.RecyclerViewProvider; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.Utils; +import org.smartregister.view.contract.SmartRegisterClient; +import org.smartregister.view.contract.SmartRegisterClients; +import org.smartregister.view.dialog.FilterOption; +import org.smartregister.view.dialog.ServiceModeOption; +import org.smartregister.view.dialog.SortOption; +import org.smartregister.view.viewholder.OnClickFormLauncher; +import java.text.MessageFormat; +import java.util.Set; + +import static org.smartregister.chw.core.utils.ChildDBConstants.KEY.MOTHER_NAME; +import static org.smartregister.chw.core.utils.Utils.getDuration; +import static org.smartregister.chw.util.Utils.getClientName; + +public class OutOfAreaProvider implements RecyclerViewProvider { + public final LayoutInflater inflater; + private Set visibleColumns; + private View.OnClickListener onClickListener; + private View.OnClickListener paginationClickListener; + private Context context; + private CommonRepository commonRepository; + + public OutOfAreaProvider(Context context, CommonRepository commonRepository, Set visibleColumns, View.OnClickListener onClickListener, View.OnClickListener paginationClickListener) { + inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + this.visibleColumns = visibleColumns; + this.onClickListener = onClickListener; + this.paginationClickListener = paginationClickListener; + this.context = context; + this.commonRepository = commonRepository; + } + + protected static void fillValue(TextView v, String value) { + if (v != null) { + v.setText(value); + } + } + + @Override + public void getView(Cursor cursor, SmartRegisterClient client, RegisterViewHolder viewHolder) { + CommonPersonObjectClient pc = (CommonPersonObjectClient) client; + if (visibleColumns.isEmpty()) { + populatePatientColumn(pc, viewHolder); + populateLastColumn(pc, viewHolder); + } + } + + private void populateLastColumn(CommonPersonObjectClient pc, RegisterViewHolder viewHolder) { + Utils.startAsyncTask(new OutOfAreaChildAsyncTask(context, commonRepository, viewHolder, pc, onClickListener), null); + } + + private int getChildRegisterLayout() { + return !ChwApplication.getApplicationFlavor().prioritizeChildNameOnChildRegister() ? R.layout.adapter_child_register_list_row : R.layout.adapter_prioritize_child_register_list_row; + } + + @Override + public void getFooterView(RecyclerView.ViewHolder viewHolder, int currentPageCount, int totalPageCount, boolean hasNext, boolean hasPrevious) { + FooterViewHolder footerViewHolder = (FooterViewHolder) viewHolder; + footerViewHolder.pageInfoView.setText( + MessageFormat.format(context.getString(org.smartregister.R.string.str_page_info), currentPageCount, + totalPageCount)); + + footerViewHolder.nextPageView.setVisibility(hasNext ? View.VISIBLE : View.INVISIBLE); + footerViewHolder.previousPageView.setVisibility(hasPrevious ? View.VISIBLE : View.INVISIBLE); + + footerViewHolder.nextPageView.setOnClickListener(paginationClickListener); + footerViewHolder.previousPageView.setOnClickListener(paginationClickListener); + } + + @Override + public SmartRegisterClients updateClients(FilterOption villageFilter, ServiceModeOption serviceModeOption, FilterOption searchFilter, SortOption sortOption) { + return null; + } + + @Override + public void onServiceModeSelected(ServiceModeOption serviceModeOption) {//Implement Abstract Method + } + + @Override + public OnClickFormLauncher newFormLauncher(String formName, String entityId, String metaData) { + return null; + } + + @Override + public LayoutInflater inflater() { + return inflater; + } + + @Override + public RegisterViewHolder createViewHolder(ViewGroup parent) { + View view = inflater.inflate(getChildRegisterLayout(), parent, false); + return new RegisterViewHolder(view); + } + + @Override + public RecyclerView.ViewHolder createFooterHolder(ViewGroup parent) { + View view = inflater.inflate(org.smartregister.chw.core.R.layout.smart_register_pagination, parent, false); + return new FooterViewHolder(view); + } + + @Override + public boolean isFooterViewHolder(RecyclerView.ViewHolder viewHolder) { + return viewHolder instanceof FooterViewHolder; + } + + protected void populatePatientColumn(CommonPersonObjectClient pc, RegisterViewHolder viewHolder) { + try{ + String motherName = Utils.getValue(pc.getColumnmaps(), MOTHER_NAME, true); + String parentName = context.getResources().getString(R.string.care_giver_initials) + ": " + motherName; + fillValue(viewHolder.textViewParentName, WordUtils.capitalize(parentName)); + String firstName = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.FIRST_NAME, true); + String middleName = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.MIDDLE_NAME, true); + String childName = getClientName(firstName, middleName); + String dobString = getDuration(Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.DOB, false)); + String age = WordUtils.capitalize(Utils.getTranslatedDate(dobString, context)); + fillValue(viewHolder.textViewChildName, WordUtils.capitalize(childName)+", "+age); + String gender_key = Utils.getValue(pc.getColumnmaps(), DBConstants.KEY.GENDER, true); + fillValue(viewHolder.textViewAddressGender, "Gender: "+gender_key); + }catch (Exception e){ + e.printStackTrace(); + } + + } + + public LayoutInflater getInflater() { + return inflater; + } + + public View.OnClickListener getOnClickListener() { + return onClickListener; + } + + public void setOnClickListener(View.OnClickListener onClickListener) { + this.onClickListener = onClickListener; + } + + public View.OnClickListener getPaginationClickListener() { + return paginationClickListener; + } + + public void setPaginationClickListener(View.OnClickListener paginationClickListener) { + this.paginationClickListener = paginationClickListener; + } + + public Context getContext() { + return context; + } + + public void setContext(Context context) { + this.context = context; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/repository/ChwRepositoryFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/repository/ChwRepositoryFlv.java new file mode 100644 index 0000000000..c95ec7b134 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/repository/ChwRepositoryFlv.java @@ -0,0 +1,155 @@ +package org.smartregister.chw.repository; + +import android.content.Context; + +import net.sqlcipher.database.SQLiteDatabase; + +import org.smartregister.chw.anc.repository.VisitRepository; +import org.smartregister.chw.util.RepositoryUtils; +import org.smartregister.chw.util.RepositoryUtilsFlv; +import org.smartregister.domain.db.Column; +import org.smartregister.immunization.repository.RecurringServiceRecordRepository; +import org.smartregister.immunization.repository.VaccineRepository; +import org.smartregister.immunization.util.IMDatabaseUtils; +import org.smartregister.reporting.ReportingLibrary; +import org.smartregister.repository.AlertRepository; +import org.smartregister.repository.EventClientRepository; + +import java.util.Arrays; +import java.util.Collections; + +import timber.log.Timber; + +public class ChwRepositoryFlv { + + public static void onUpgrade(Context context, SQLiteDatabase db, int oldVersion, int newVersion) { + Timber.w(ChwRepository.class.getName(), + "Upgrading database from version " + oldVersion + " to " + + newVersion + ", which will destroy all old data"); + int upgradeTo = oldVersion + 1; + while (upgradeTo <= newVersion) { + switch (upgradeTo) { + case 2: + upgradeToVersion2(db); + break; + case 3: + upgradeToVersion3(db); + break; + case 4: + upgradeToVersion4(db); + break; + case 5: + upgradeToVersion5(context, db); + break; + case 6: + upgradeToVersion6(db); + break; + case 7: + upgradeToVersion7(db); + break; + default: + break; + } + upgradeTo++; + } + } + + private static void upgradeToVersion2(SQLiteDatabase db) { + try { + // nuke the database and recreate everything + + // add missing vaccine columns + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_EVENT_ID_COL); + db.execSQL(VaccineRepository.EVENT_ID_INDEX); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_FORMSUBMISSION_ID_COL); + db.execSQL(VaccineRepository.FORMSUBMISSION_INDEX); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_OUT_OF_AREA_COL); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_OUT_OF_AREA_COL_INDEX); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_HIA2_STATUS_COL); + + // add missing event repository table + Column[] columns = {EventClientRepository.event_column.formSubmissionId}; + EventClientRepository.createIndex(db, EventClientRepository.Table.event, columns); + + db.execSQL(VaccineRepository.ALTER_ADD_CREATED_AT_COLUMN); + VaccineRepository.migrateCreatedAt(db); + + db.execSQL(RecurringServiceRecordRepository.ALTER_ADD_CREATED_AT_COLUMN); + RecurringServiceRecordRepository.migrateCreatedAt(db); + + // add missing alert table info + db.execSQL(AlertRepository.ALTER_ADD_OFFLINE_COLUMN); + db.execSQL(AlertRepository.OFFLINE_INDEX); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_TEAM_COL); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_TEAM_ID_COL); + db.execSQL(RecurringServiceRecordRepository.UPDATE_TABLE_ADD_TEAM_COL); + db.execSQL(RecurringServiceRecordRepository.UPDATE_TABLE_ADD_TEAM_ID_COL); + + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_CHILD_LOCATION_ID_COL); + db.execSQL(RecurringServiceRecordRepository.UPDATE_TABLE_ADD_CHILD_LOCATION_ID_COL); + + // setup reporting + ReportingLibrary reportingLibrary = ReportingLibrary.getInstance(); + String childIndicatorsConfigFile = "config/child-reporting-indicator-definitions.yml"; + String ancIndicatorConfigFile = "config/anc-reporting-indicator-definitions.yml"; + String pncIndicatorConfigFile = "config/pnc-reporting-indicator-definitions.yml"; + for (String configFile : Collections.unmodifiableList( + Arrays.asList(childIndicatorsConfigFile, ancIndicatorConfigFile, pncIndicatorConfigFile))) { + reportingLibrary.readConfigFile(configFile, db); + } + + } catch (Exception e) { + Timber.e(e, "upgradeToVersion2 "); + } + } + + private static void upgradeToVersion3(SQLiteDatabase db) { + try { + // delete possible duplication + db.execSQL(RepositoryUtils.ADD_MISSING_REPORTING_COLUMN); + } catch (Exception e) { + Timber.e(e); + } + } + + private static void upgradeToVersion4(SQLiteDatabase db) { + try { + RepositoryUtils.addDetailsColumnToFamilySearchTable(db); + } catch (Exception e) { + Timber.e(e); + } + } + + private static void upgradeToVersion5(Context context, SQLiteDatabase db) { + try { + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_IS_VOIDED_COL); + db.execSQL(VaccineRepository.UPDATE_TABLE_ADD_IS_VOIDED_COL_INDEX); + + IMDatabaseUtils.accessAssetsAndFillDataBaseForVaccineTypes(context, db); + } catch (Exception e) { + Timber.e(e); + } + } + + private static void upgradeToVersion6(SQLiteDatabase db) { + try { + /*db.execSQL(RepositoryUtils.ADD_DEATH_RECEIVE_COLUMN_TO_ECCHILD); + db.execSQL(RepositoryUtils.ADD_DEATH_CERT_DATE_TO_ECCHILD); + db.execSQL(RepositoryUtils.ADD_DEATH_RECEIVE_COLUMNS_TO_FAMILY_MEMBER); + db.execSQL(RepositoryUtils.ADD_DEATH_CERT_DATE_TO_FAMILY_MEMBER); + db.execSQL(RepositoryUtils.ADD_BIRTH_REG_TO_CHILD);*/ +// db.execSQL(RepositoryUtils.ADD_OUT_OF_AREA_CHILD_TABLE); + db.execSQL(VisitRepository.ADD_VISIT_GROUP_COLUMN); + } catch (Exception e) { + Timber.e(e); + } + } + + private static void upgradeToVersion7(SQLiteDatabase db) { + try { + db.execSQL(RepositoryUtilsFlv.ADD_DEATH_CAUSE_COL_QUERY); + } catch (Exception e) { + Timber.e(e); + } + } +} \ No newline at end of file diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/task/ChildHomeVisitSchedulerFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/task/ChildHomeVisitSchedulerFlv.java new file mode 100644 index 0000000000..9abc544eb0 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/task/ChildHomeVisitSchedulerFlv.java @@ -0,0 +1,4 @@ +package org.smartregister.chw.task; + +public class ChildHomeVisitSchedulerFlv extends DefaultChildHomeVisitSchedulerFlv { +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/task/OutOfAreaChildAsyncTask.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/task/OutOfAreaChildAsyncTask.java new file mode 100644 index 0000000000..4f476128cc --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/task/OutOfAreaChildAsyncTask.java @@ -0,0 +1,168 @@ +package org.smartregister.chw.task; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.view.View; +import android.widget.Button; + +import com.vijay.jsonwizard.constants.JsonFormConstants; +import com.vijay.jsonwizard.domain.Form; + +import org.apache.commons.lang3.StringUtils; +import org.jeasy.rules.api.Rules; +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.activity.OutOfAreaChildUpdateFormActivity; +import org.smartregister.chw.core.application.CoreChwApplication; +import org.smartregister.chw.core.dao.VisitDao; +import org.smartregister.chw.core.domain.VisitSummary; +import org.smartregister.chw.core.holders.RegisterViewHolder; +import org.smartregister.chw.core.model.ChildVisit; +import org.smartregister.chw.core.utils.ChwDBConstants; +import org.smartregister.chw.core.utils.CoreChildUtils; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.util.Constants; +import org.smartregister.commonregistry.CommonPersonObject; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.commonregistry.CommonRepository; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.family.util.Utils; +import org.smartregister.opd.activity.BaseOpdFormActivity; +import org.smartregister.opd.utils.OpdConstants; + +import java.text.SimpleDateFormat; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +import timber.log.Timber; + +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.RECEIVED_DEATH_CERTIFICATE; +import static org.smartregister.chw.core.utils.Utils.getDuration; +import static org.smartregister.chw.util.CrvsConstants.BASE_ENTITY_ID; +import static org.smartregister.chw.util.CrvsConstants.NO; +import static org.smartregister.chw.util.CrvsConstants.YES; + +public class OutOfAreaChildAsyncTask extends AsyncTask { + public final Context context; + private final CommonRepository commonRepository; + public final RegisterViewHolder viewHolder; + public final CommonPersonObjectClient baseEntityId; + private final Rules rules; + public CommonPersonObject commonPersonObject; + public ChildVisit childVisit; + public View.OnClickListener onClickListener; + private SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); + + public OutOfAreaChildAsyncTask(Context context, CommonRepository commonRepository, RegisterViewHolder viewHolder, CommonPersonObjectClient baseEntityId, View.OnClickListener onClickListener) { + this.context = context; + this.commonRepository = commonRepository; + this.viewHolder = viewHolder; + this.baseEntityId = baseEntityId; + this.onClickListener = onClickListener; + this.rules = CoreChwApplication.getInstance().getRulesEngineHelper().rules(CoreConstants.RULE_FILE.HOME_VISIT); + } + + @Override + public Void doInBackground(Void... params) { + if (baseEntityId != null) { + commonPersonObject = commonRepository.findByBaseEntityId(Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false)); + + Map map = VisitDao.getVisitSummary(Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false)); + if (map != null) { + VisitSummary notDoneSummary = map.get(CoreConstants.EventType.CHILD_VISIT_NOT_DONE); + VisitSummary lastVisitSummary = map.get(CoreConstants.EventType.CHILD_HOME_VISIT); + + long lastVisit = 0; + long visitNot = 0; + long dateCreated = 0; + try { + String createVal = Utils.getValue(baseEntityId.getColumnmaps(), ChwDBConstants.DATE_CREATED, false); + if (StringUtils.isNotBlank(createVal)) + dateCreated = Objects.requireNonNull(ISO8601DATEFORMAT.parse(createVal)).getTime(); + + } catch (Exception e) { + Timber.e(e); + } + if (lastVisitSummary != null) + lastVisit = lastVisitSummary.getVisitDate().getTime(); + + if (notDoneSummary != null) + visitNot = notDoneSummary.getVisitDate().getTime(); + + try { + String dobString = getDuration(Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.DOB, false)); + childVisit = CoreChildUtils.getChildVisitStatus(context, rules, dobString, lastVisit, visitNot, dateCreated); + } catch (Exception e) { + childVisit = null; + e.printStackTrace(); + } + } + return null; + } + return null; + } + + @Override + protected void onPostExecute(Void param) { + viewHolder.dueButtonLayout.setVisibility(View.VISIBLE); + viewHolder.dueButton.setVisibility(View.VISIBLE); + String received_death_certificate; + try { + received_death_certificate = Utils.getValue(baseEntityId.getColumnmaps(), RECEIVED_DEATH_CERTIFICATE, false); + if (received_death_certificate.trim().equalsIgnoreCase(YES)) { + setReceivedButtonColor(context, viewHolder.dueButton); + } else if (received_death_certificate.trim().equalsIgnoreCase(NO)) { + setNotReceivedButtonColor(context, viewHolder.dueButton); + } else { + setUpdateStatusButtonColor(context, viewHolder.dueButton); + } + } catch (Exception e) { + viewHolder.dueButton.setText(context.getResources().getString(R.string.update_details)); + e.printStackTrace(); + } + viewHolder.dueButton.setOnClickListener(view -> { + String entityId = Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + Intent intent = new Intent(context, OutOfAreaChildUpdateFormActivity.class); + intent.putExtra(Constants.ACTIVITY_PAYLOAD.ACTION, Constants.ACTION.START_REGISTRATION); + intent.putExtra(BASE_ENTITY_ID, entityId); + context.startActivity(intent); + }); + + } + + public void startFormActivity(JSONObject jsonForm) { + Intent intent = new Intent(context, BaseOpdFormActivity.class); + intent.putExtra(OpdConstants.JSON_FORM_EXTRA.JSON, jsonForm.toString()); + Form form = new Form(); + form.setName(context.getString(R.string.update_client_registration)); + form.setActionBarBackground(R.color.family_actionbar); + form.setNavigationBackground(R.color.family_navigation); + form.setHomeAsUpIndicator(R.mipmap.ic_cross_white); + form.setPreviousLabel(context.getResources().getString(R.string.back)); + form.setWizard(false); + intent.putExtra(JsonFormConstants.JSON_FORM_KEY.FORM, form); + ((Activity)context).startActivityForResult(intent, JsonFormUtils.REQUEST_CODE_GET_JSON); + } + + public void setNotReceivedButtonColor(Context context, Button dueButton) { + dueButton.setTextColor(context.getResources().getColor(R.color.black)); + dueButton.setText(context.getString(R.string.birth_certificate_not_received)); + dueButton.setBackgroundResource(0); + } + + public void setReceivedButtonColor(Context context, Button dueButton) { + dueButton.setTextColor(context.getResources().getColor(R.color.certificate_received_green)); + dueButton.setText(context.getString(R.string.birth_certificate_received)); + dueButton.setBackgroundResource(0); + } + + public void setUpdateStatusButtonColor(Context context, Button dueButton) { + dueButton.setTextColor(context.getResources().getColor(R.color.pie_chart_yellow)); + dueButton.setText(context.getString(R.string.update_details)); + dueButton.setBackgroundResource(R.drawable.update_cert_status_btn); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/task/OutOfAreaDeathAsyncTask.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/task/OutOfAreaDeathAsyncTask.java new file mode 100644 index 0000000000..51fefd8122 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/task/OutOfAreaDeathAsyncTask.java @@ -0,0 +1,168 @@ +package org.smartregister.chw.task; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.AsyncTask; +import android.view.View; +import android.widget.Button; + +import com.vijay.jsonwizard.constants.JsonFormConstants; +import com.vijay.jsonwizard.domain.Form; + +import org.apache.commons.lang3.StringUtils; +import org.jeasy.rules.api.Rules; +import org.json.JSONObject; +import org.smartregister.chw.R; +import org.smartregister.chw.activity.OutOfAreaDeathUpdateFormActivity; +import org.smartregister.chw.core.application.CoreChwApplication; +import org.smartregister.chw.core.dao.VisitDao; +import org.smartregister.chw.core.domain.VisitSummary; +import org.smartregister.chw.core.holders.RegisterViewHolder; +import org.smartregister.chw.core.model.ChildVisit; +import org.smartregister.chw.core.utils.ChwDBConstants; +import org.smartregister.chw.core.utils.CoreChildUtils; +import org.smartregister.chw.core.utils.CoreConstants; +import org.smartregister.chw.util.Constants; +import org.smartregister.commonregistry.CommonPersonObject; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.commonregistry.CommonRepository; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.family.util.Utils; +import org.smartregister.opd.activity.BaseOpdFormActivity; +import org.smartregister.opd.utils.OpdConstants; + +import java.text.SimpleDateFormat; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +import timber.log.Timber; + +import static org.smartregister.chw.core.utils.CoreConstants.FORM_CONSTANTS.REMOVE_MEMBER_FORM.RECEIVED_DEATH_CERTIFICATE; +import static org.smartregister.chw.core.utils.Utils.getDuration; +import static org.smartregister.chw.util.CrvsConstants.BASE_ENTITY_ID; +import static org.smartregister.chw.util.CrvsConstants.NO; +import static org.smartregister.chw.util.CrvsConstants.YES; + +public class OutOfAreaDeathAsyncTask extends AsyncTask { + public final Context context; + private final CommonRepository commonRepository; + public final RegisterViewHolder viewHolder; + public final CommonPersonObjectClient baseEntityId; + private final Rules rules; + public CommonPersonObject commonPersonObject; + public ChildVisit childVisit; + public View.OnClickListener onClickListener; + private SimpleDateFormat ISO8601DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); + + public OutOfAreaDeathAsyncTask(Context context, CommonRepository commonRepository, RegisterViewHolder viewHolder, CommonPersonObjectClient baseEntityId, View.OnClickListener onClickListener) { + this.context = context; + this.commonRepository = commonRepository; + this.viewHolder = viewHolder; + this.baseEntityId = baseEntityId; + this.onClickListener = onClickListener; + this.rules = CoreChwApplication.getInstance().getRulesEngineHelper().rules(CoreConstants.RULE_FILE.HOME_VISIT); + } + + @Override + public Void doInBackground(Void... params) { + if (commonRepository != null) { + commonPersonObject = commonRepository.findByBaseEntityId(Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false)); + + Map map = VisitDao.getVisitSummary(Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false)); + if (map != null) { + VisitSummary notDoneSummary = map.get(CoreConstants.EventType.CHILD_VISIT_NOT_DONE); + VisitSummary lastVisitSummary = map.get(CoreConstants.EventType.CHILD_HOME_VISIT); + + long lastVisit = 0; + long visitNot = 0; + long dateCreated = 0; + try { + String createVal = Utils.getValue(commonPersonObject.getColumnmaps(), ChwDBConstants.DATE_CREATED, false); + if (StringUtils.isNotBlank(createVal)) + dateCreated = Objects.requireNonNull(ISO8601DATEFORMAT.parse(createVal)).getTime(); + + } catch (Exception e) { + Timber.e(e); + } + if (lastVisitSummary != null) + lastVisit = lastVisitSummary.getVisitDate().getTime(); + + if (notDoneSummary != null) + visitNot = notDoneSummary.getVisitDate().getTime(); + + try { + String dobString = getDuration(Utils.getValue(commonPersonObject.getColumnmaps(), DBConstants.KEY.DOB, false)); + childVisit = CoreChildUtils.getChildVisitStatus(context, rules, dobString, lastVisit, visitNot, dateCreated); + } catch (Exception e) { + childVisit = null; + e.printStackTrace(); + } + } + return null; + } + return null; + } + + @Override + protected void onPostExecute(Void param) { + viewHolder.dueButtonLayout.setVisibility(View.VISIBLE); + viewHolder.dueButton.setVisibility(View.VISIBLE); + String received_death_certificate; + try { + received_death_certificate = Utils.getValue(baseEntityId.getColumnmaps(), RECEIVED_DEATH_CERTIFICATE, false); + if (received_death_certificate.trim().equalsIgnoreCase(YES)) { + setReceivedButtonColor(context, viewHolder.dueButton); + } else if (received_death_certificate.trim().equalsIgnoreCase(NO)) { + setNotReceivedButtonColor(context, viewHolder.dueButton); + } else { + setUpdateStatusButtonColor(context, viewHolder.dueButton); + } + } catch (Exception e) { + viewHolder.dueButton.setText(context.getResources().getString(R.string.update_details)); + e.printStackTrace(); + } + viewHolder.dueButton.setOnClickListener(view -> { + String entityId = Utils.getValue(baseEntityId.getColumnmaps(), DBConstants.KEY.BASE_ENTITY_ID, false); + Intent intent = new Intent(context, OutOfAreaDeathUpdateFormActivity.class); + intent.putExtra(Constants.ACTIVITY_PAYLOAD.ACTION, Constants.ACTION.START_REGISTRATION); + intent.putExtra(BASE_ENTITY_ID, entityId); + context.startActivity(intent); + }); + + } + + public void startFormActivity(JSONObject jsonForm) { + Intent intent = new Intent(context, BaseOpdFormActivity.class); + intent.putExtra(OpdConstants.JSON_FORM_EXTRA.JSON, jsonForm.toString()); + Form form = new Form(); + form.setName(context.getString(R.string.update_client_registration)); + form.setActionBarBackground(R.color.family_actionbar); + form.setNavigationBackground(R.color.family_navigation); + form.setHomeAsUpIndicator(R.mipmap.ic_cross_white); + form.setPreviousLabel(context.getResources().getString(R.string.back)); + form.setWizard(false); + intent.putExtra(JsonFormConstants.JSON_FORM_KEY.FORM, form); + ((Activity)context).startActivityForResult(intent, JsonFormUtils.REQUEST_CODE_GET_JSON); + } + + public void setNotReceivedButtonColor(Context context, Button dueButton) { + dueButton.setTextColor(context.getResources().getColor(R.color.black)); + dueButton.setText(context.getString(R.string.death_certificate_not_received)); + dueButton.setBackgroundResource(0); + } + + public void setReceivedButtonColor(Context context, Button dueButton) { + dueButton.setTextColor(context.getResources().getColor(R.color.certificate_received_green)); + dueButton.setText(context.getString(R.string.death_certificate_received)); + dueButton.setBackgroundResource(0); + } + + public void setUpdateStatusButtonColor(Context context, Button dueButton) { + dueButton.setTextColor(context.getResources().getColor(R.color.pie_chart_yellow)); + dueButton.setText(context.getString(R.string.update_details)); + dueButton.setBackgroundResource(R.drawable.update_cert_status_btn); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/ChildUtilsFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/ChildUtilsFlv.java new file mode 100644 index 0000000000..d105bff5d2 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/ChildUtilsFlv.java @@ -0,0 +1,23 @@ +package org.smartregister.chw.util; + +import java.util.ArrayList; + +public class ChildUtilsFlv implements ChildUtils.Flavor { + + public ArrayList mainColumns(String tableName, String familyTable, String familyMemberTable) { + return new ArrayList<>(); + } + + @Override + public String[] getOneYearVaccines() { + return new String[]{"bcg", "opv1", "penta1", "pcv1", "rota1", "opv2", "penta2", "pcv2", "rota2", "opv3", "penta3", "pcv3", "ipv", "mcv1", + "yellowfever", "rota3", "mena", "rubella1" + }; + } + + @Override + public String[] getTwoYearVaccines() { + return new String[]{"bcg", "opv1", "penta1", "pcv1", "rota1", "opv2", "penta2", "pcv2", "rota2", "opv3", "penta3", "pcv3", "ipv", "mcv1", + "yellowfever", "mcv2", "rota3", "mena", "rubella1", "rubella2"}; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CoreChildUtils.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CoreChildUtils.java new file mode 100644 index 0000000000..47b8725001 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CoreChildUtils.java @@ -0,0 +1,68 @@ +package org.smartregister.chw.util; + +import static org.smartregister.chw.core.utils.CoreConstants.DOB_UNKNOWN; +import static org.smartregister.chw.core.utils.CoreConstants.OTHER_NAME; +import static org.smartregister.chw.core.utils.CoreConstants.SURNAME; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializer; +import org.joda.time.DateTime; +import org.joda.time.format.ISODateTimeFormat; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; +import org.smartregister.family.util.DBConstants; +import java.util.ArrayList; + +public abstract class CoreChildUtils { + + public static Gson gsonConverter; + + static { + gsonConverter = new GsonBuilder() + .setPrettyPrinting() + .serializeNulls() + .registerTypeAdapter(DateTime.class, (JsonSerializer) (json, typeOfSrc, context) -> new JsonPrimitive(ISODateTimeFormat.dateTime().print(json))) + .registerTypeAdapter(DateTime.class, (JsonDeserializer) (json, typeOfT, context) -> new DateTime(json.getAsJsonPrimitive().getAsString())) + .create(); + } + + public static String mainSelectRegisterWithoutGroupby(String tableName, String familyTableName, String familyMemberTableName, String mainCondition) { + SmartRegisterQueryBuilder queryBuilder = new SmartRegisterQueryBuilder(); + queryBuilder.selectInitiateMainTable(tableName, mainColumns(tableName)); + return queryBuilder.mainCondition(mainCondition); + } + + public static String[] mainColumns(String tableName) { + ArrayList columnList = new ArrayList<>(); + columnList.add(tableName + "." + DBConstants.KEY.RELATIONAL_ID + " as " + ChildDBConstants.KEY.RELATIONAL_ID); + columnList.add(tableName + "." + DBConstants.KEY.BASE_ENTITY_ID); + columnList.add(tableName + "." + DBConstants.KEY.UNIQUE_ID); + columnList.add(tableName + "." + SURNAME); + columnList.add(tableName + "." + DBConstants.KEY.FIRST_NAME); + columnList.add(tableName + "." + DBConstants.KEY.MIDDLE_NAME); + columnList.add(tableName + "." + DBConstants.KEY.DOB); + columnList.add(tableName + "." + DOB_UNKNOWN); + columnList.add(tableName + "." + DBConstants.KEY.GENDER); + columnList.add(tableName + "." + OTHER_NAME); + columnList.add(tableName + "." + CrvsConstants.FATHER_NAME); + columnList.add(tableName + "." + CrvsConstants.FATHER_BIRTH_PLACE); + columnList.add(tableName + "." + CrvsConstants.MOTHER_MARITAL_STATUS); + columnList.add(tableName + "." + CrvsConstants.BIRTH_PLACE_TYPE); + columnList.add(tableName + "." + CrvsConstants.DEL_ATTENDANT); + columnList.add(tableName + "." + CrvsConstants.DEL_MODE); + columnList.add(tableName + "." + CrvsConstants.TYPE_OF_PREGNANCY); + columnList.add(tableName + "." + CrvsConstants.MOTHER_HIGHEST_EDU_LEVEL); + columnList.add(tableName + "." + CrvsConstants.FATHER_MARITAL_STATUS); + columnList.add(tableName + "." + CrvsConstants.FATHER_HIGHEST_EDU_LEVEL); + columnList.add(tableName + "." + DBConstants.KEY.LAST_INTERACTED_WITH); + return columnList.toArray(new String[columnList.size()]); + } + + public interface Flavor { + String[] getOneYearVaccines(); + String[] getTwoYearVaccines(); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CrvsConstants.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CrvsConstants.java new file mode 100644 index 0000000000..c6320ef361 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CrvsConstants.java @@ -0,0 +1,7 @@ +package org.smartregister.chw.util; + +public class CrvsConstants extends Constants { + public static String USER_TYPE = "userType"; + public static String USER = "User"; + public static String AGENT = "Agent"; +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CrvsDBUtils.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CrvsDBUtils.java new file mode 100644 index 0000000000..068404de73 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/CrvsDBUtils.java @@ -0,0 +1,94 @@ +package org.smartregister.chw.util; + +import static org.smartregister.AllConstants.CLIENT_TYPE; +import static org.smartregister.chw.anc.util.Constants.TABLES.EC_CHILD; +import static org.smartregister.chw.core.utils.CoreConstants.TABLE_NAME.EC_OUT_OF_AREA_CHILD; + +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.family.util.DBConstants; + +import java.util.ArrayList; + +public class CrvsDBUtils { + + public static String[] mainBirthCertificationColumns(String tableName, String familyTable, String familyMemberTable) { + ArrayList columnList = new ArrayList<>(); + columnList.add(tableName + "." + DBConstants.KEY.RELATIONAL_ID + " as " + ChildDBConstants.KEY.RELATIONAL_ID); + columnList.add(tableName + "." + DBConstants.KEY.LAST_INTERACTED_WITH); + columnList.add(tableName + "." + DBConstants.KEY.BASE_ENTITY_ID); + columnList.add(tableName + "." + DBConstants.KEY.FIRST_NAME); + columnList.add(tableName + "." + DBConstants.KEY.MIDDLE_NAME); + columnList.add(familyMemberTable + "." + DBConstants.KEY.FIRST_NAME + " as " + ChildDBConstants.KEY.FAMILY_FIRST_NAME); + columnList.add(familyMemberTable + "." + DBConstants.KEY.LAST_NAME + " as " + ChildDBConstants.KEY.FAMILY_LAST_NAME); + columnList.add(familyMemberTable + "." + DBConstants.KEY.MIDDLE_NAME + " as " + ChildDBConstants.KEY.FAMILY_MIDDLE_NAME); + columnList.add(familyMemberTable + "." + ChildDBConstants.PHONE_NUMBER + " as " + ChildDBConstants.KEY.FAMILY_MEMBER_PHONENUMBER); + columnList.add(familyMemberTable + "." + ChildDBConstants.OTHER_PHONE_NUMBER + " as " + ChildDBConstants.KEY.FAMILY_MEMBER_PHONENUMBER_OTHER); + columnList.add(familyTable + "." + DBConstants.KEY.VILLAGE_TOWN + " as " + ChildDBConstants.KEY.FAMILY_HOME_ADDRESS); + columnList.add(tableName + "." + DBConstants.KEY.LAST_NAME); + columnList.add(tableName + "." + DBConstants.KEY.UNIQUE_ID); + columnList.add(tableName + "." + DBConstants.KEY.GENDER); + columnList.add(tableName + "." + DBConstants.KEY.DOB); + columnList.add(tableName + "." + org.smartregister.family.util.Constants.JSON_FORM_KEY.DOB_UNKNOWN); + columnList.add(tableName + "." + ChildDBConstants.KEY.LAST_HOME_VISIT); + columnList.add(tableName + "." + ChildDBConstants.KEY.VISIT_NOT_DONE); + columnList.add(tableName + "." + ChildDBConstants.KEY.CHILD_BF_HR); + columnList.add(tableName + "." + ChildDBConstants.KEY.CHILD_PHYSICAL_CHANGE); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_CERT); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_CERT_ISSUE_DATE); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_CERT_NUMBER); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_CERT_NOTIFIICATION); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_REG_TYPE); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_REGISTRATION); + columnList.add(tableName + "." + ChildDBConstants.KEY.SYSTEM_BIRTH_NOTIFICATION); + columnList.add(tableName + "." + ChildDBConstants.KEY.INFORMANT_REASON); + columnList.add(tableName + "." + ChildDBConstants.KEY.ILLNESS_DATE); + columnList.add(tableName + "." + ChildDBConstants.KEY.ILLNESS_DESCRIPTION); + columnList.add(tableName + "." + ChildDBConstants.KEY.DATE_CREATED); + columnList.add(tableName + "." + ChildDBConstants.KEY.ILLNESS_ACTION); + columnList.add(tableName + "." + ChildDBConstants.KEY.VACCINE_CARD); + columnList.add("'" + EC_CHILD + "'" + " as " + CLIENT_TYPE); + + return columnList.toArray(new String[columnList.size()]); + } + + // Union select columns for out of area children + public static String[] outOfAreaBirthCertificationMainColumns(String tableName) { + ArrayList columnList = new ArrayList<>(); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.RELATIONAL_ID); + columnList.add(tableName + "." + DBConstants.KEY.LAST_INTERACTED_WITH); + columnList.add(tableName + "." + DBConstants.KEY.BASE_ENTITY_ID); + columnList.add(tableName + "." + DBConstants.KEY.FIRST_NAME); + columnList.add(tableName + "." + DBConstants.KEY.MIDDLE_NAME); + columnList.add(tableName + "." + ChildDBConstants.KEY.MOTHER_NAME + " as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.FAMILY_FIRST_NAME); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.FAMILY_LAST_NAME); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.FAMILY_MIDDLE_NAME); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.FAMILY_MEMBER_PHONENUMBER); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.FAMILY_MEMBER_PHONENUMBER_OTHER); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.FAMILY_HOME_ADDRESS); + columnList.add(tableName + "." + DBConstants.KEY.MIDDLE_NAME + " as " + DBConstants.KEY.LAST_NAME); + columnList.add(tableName + "." + DBConstants.KEY.UNIQUE_ID); + columnList.add(tableName + "." + DBConstants.KEY.GENDER); + columnList.add(tableName + "." + DBConstants.KEY.DOB); + columnList.add(tableName + "." + org.smartregister.family.util.Constants.JSON_FORM_KEY.DOB_UNKNOWN); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.LAST_HOME_VISIT); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.VISIT_NOT_DONE); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.CHILD_BF_HR); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.CHILD_PHYSICAL_CHANGE); + columnList.add(tableName + "." + org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT); + columnList.add(tableName + "." + org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT_ISSUE_DATE); + columnList.add(tableName + "." + org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT_NUMBER); + columnList.add(tableName + "." + org.smartregister.chw.core.utils.ChildDBConstants.KEY.BIRTH_CERT_NOTIFIICATION); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_REG_TYPE); + columnList.add(tableName + "." + ChildDBConstants.KEY.BIRTH_REGISTRATION); + columnList.add(tableName + "." + ChildDBConstants.KEY.SYSTEM_BIRTH_NOTIFICATION); + columnList.add(tableName + "." + ChildDBConstants.KEY.INFORMANT_REASON); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.ILLNESS_DATE); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.ILLNESS_DESCRIPTION); + columnList.add(tableName + "." + org.smartregister.chw.core.utils.ChildDBConstants.KEY.DATE_CREATED); + columnList.add("'' as " + org.smartregister.chw.core.utils.ChildDBConstants.KEY.ILLNESS_ACTION); + columnList.add("'' as " + ChildDBConstants.KEY.VACCINE_CARD); + columnList.add("'" + EC_OUT_OF_AREA_CHILD + "'" + " as " + CLIENT_TYPE); + + return columnList.toArray(new String[columnList.size()]); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/DateUtils.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/DateUtils.java new file mode 100644 index 0000000000..8c65e5b182 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/DateUtils.java @@ -0,0 +1,31 @@ +package org.smartregister.chw.util; + +import com.mapbox.mapboxsdk.log.Logger; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +public class DateUtils { + + public static String changeDateFormat(String date){ + String[] splitDob = date.split("T"); + String inputFormat = "yyyy-MM-dd"; + String OutPutFormat = "dd-MM-yyyy"; + return formatDate(splitDob[0], inputFormat, OutPutFormat); + } + + public static String formatDate(String dateToFormat, String inputFormat, String outputFormat) { + try { + Logger.e("DATE", "Input Date Date is " + dateToFormat); + String convertedDate = new SimpleDateFormat(outputFormat) + .format(new SimpleDateFormat(inputFormat) + .parse(dateToFormat)); + Logger.e("DATE", "Output Date is " + convertedDate); + //Update Date + return convertedDate; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/JsonFormUtilsFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/JsonFormUtilsFlv.java new file mode 100644 index 0000000000..473310edda --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/JsonFormUtilsFlv.java @@ -0,0 +1,107 @@ +package org.smartregister.chw.util; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; + +import com.vijay.jsonwizard.domain.Form; +import org.apache.commons.lang3.StringUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.smartregister.commonregistry.CommonPersonObjectClient; +import org.smartregister.domain.Photo; +import org.smartregister.family.util.DBConstants; +import org.smartregister.family.util.JsonFormUtils; +import org.smartregister.family.util.Utils; +import org.smartregister.util.FormUtils; +import org.smartregister.util.ImageUtils; +import org.smartregister.view.LocationPickerView; +import java.util.Date; +import timber.log.Timber; +import static org.smartregister.util.JsonFormUtils.dd_MM_yyyy; + +public class JsonFormUtilsFlv extends DefaultJsonFormUtilsFlv { + + public static void startFormActivity(Context context, JSONObject jsonForm, String title) { + Intent intent = new Intent(context, Utils.metadata().familyFormActivity); + intent.putExtra("json", jsonForm.toString()); + Form form = new Form(); + form.setHideSaveLabel(true); + form.setName(title); + form.setActionBarBackground(org.smartregister.chw.core.R.color.family_actionbar); + form.setNavigationBackground(org.smartregister.chw.core.R.color.family_navigation); + form.setHomeAsUpIndicator(org.smartregister.chw.core.R.mipmap.ic_cross_white); + form.setPreviousLabel(context.getResources().getString(org.smartregister.chw.core.R.string.back)); + intent.putExtra("form", form); + ((Activity) context).startActivityForResult(intent, 2244); + } + + public static JSONObject getAutoPopulatedJsonEditFormString(String formName, Context context, CommonPersonObjectClient client, + String eventType) { + try { + JSONObject form = FormUtils.getInstance(context).getFormJson(formName); + LocationPickerView lpv = new LocationPickerView(context); + lpv.init(); + // JsonFormUtils.addWomanRegisterHierarchyQuestions(form); + Timber.d("Form is %s", form.toString()); + form.put(JsonFormUtils.ENTITY_ID, client.getCaseId()); + form.put(JsonFormUtils.ENCOUNTER_TYPE, eventType); + + JSONObject stepOne = form.getJSONObject(JsonFormUtils.STEP1); + JSONArray jsonArray = stepOne.getJSONArray(JsonFormUtils.FIELDS); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + + processPopulatableFields(client, jsonObject); + + } + + JsonFormUtils.addLocHierarchyQuestions(form); + + return form; + } catch (Exception e) { + Timber.e(e); + } + + return null; + } + + private static void getDob(CommonPersonObjectClient client, JSONObject jsonObject) throws JSONException { + String dobString = Utils.getValue(client.getColumnmaps(), DBConstants.KEY.DOB, false); + if (StringUtils.isNotBlank(dobString)) { + Date dob = Utils.dobStringToDate(dobString); + if (dob != null) { + jsonObject.put(JsonFormUtils.VALUE, dd_MM_yyyy.format(dob)); + } + } + } + + private static void getPhoto(CommonPersonObjectClient client, JSONObject jsonObject) throws JSONException { + Photo photo = ImageUtils.profilePhotoByClientID(client.getCaseId(), Utils.getProfileImageResourceIDentifier()); + if (StringUtils.isNotBlank(photo.getFilePath())) { + jsonObject.put(JsonFormUtils.VALUE, photo.getFilePath()); + } + } + + protected static void processPopulatableFields(CommonPersonObjectClient client, JSONObject jsonObject) throws JSONException { + + String key = jsonObject.getString(JsonFormUtils.KEY).toLowerCase(); + switch (key) { + case "photo": + getPhoto(client, jsonObject); + break; + case "name": + String name = Utils.getValue(client.getColumnmaps(), "name", false); + jsonObject.put(JsonFormUtils.VALUE, name); + break; + case DBConstants.KEY.DOB: + getDob(client, jsonObject); + break; + default: + String otherKey = Utils.getValue(client.getColumnmaps(), key, false); + jsonObject.put(JsonFormUtils.VALUE, otherKey); + break; + } + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/OutOfAreaDeathUtils.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/OutOfAreaDeathUtils.java new file mode 100644 index 0000000000..fa6cb88fd2 --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/OutOfAreaDeathUtils.java @@ -0,0 +1,66 @@ +package org.smartregister.chw.util; + +import static org.smartregister.chw.core.utils.CoreConstants.DB_CONSTANTS.NAME; +import static org.smartregister.chw.util.Constants.DATE_DIED; +import static org.smartregister.chw.util.Constants.DEATH_CERTIFICATE_NUMBER; +import static org.smartregister.chw.util.Constants.DEATH_PLACE; +import static org.smartregister.chw.util.Constants.MARITAL_STATUS; +import static org.smartregister.chw.util.Constants.NATIONALITY; +import static org.smartregister.chw.util.Constants.NATIONAL_ID; +import static org.smartregister.chw.util.Constants.REMOVE_REASON; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializer; +import org.joda.time.DateTime; +import org.joda.time.format.ISODateTimeFormat; +import org.smartregister.chw.core.utils.ChildDBConstants; +import org.smartregister.cursoradapter.SmartRegisterQueryBuilder; +import org.smartregister.family.util.DBConstants; + +import java.util.ArrayList; + +public abstract class OutOfAreaDeathUtils { + + public static Gson gsonConverter; + + static { + gsonConverter = new GsonBuilder() + .setPrettyPrinting() + .serializeNulls() + .registerTypeAdapter(DateTime.class, (JsonSerializer) (json, typeOfSrc, context) -> new JsonPrimitive(ISODateTimeFormat.dateTime().print(json))) + .registerTypeAdapter(DateTime.class, (JsonDeserializer) (json, typeOfT, context) -> new DateTime(json.getAsJsonPrimitive().getAsString())) + .create(); + } + + public static String mainSelectRegisterWithoutGroupby(String tableName, String mainCondition) { + SmartRegisterQueryBuilder queryBuilder = new SmartRegisterQueryBuilder(); + queryBuilder.selectInitiateMainTable(tableName, mainColumns(tableName)); + return queryBuilder.mainCondition(mainCondition); + } + + public static String[] mainColumns(String tableName) { + ArrayList columnList = new ArrayList<>(); + columnList.add(tableName + "." + ChildDBConstants.KEY.RELATIONAL_ID); + columnList.add(tableName + "." + DBConstants.KEY.BASE_ENTITY_ID); + columnList.add(tableName + "." + DBConstants.KEY.UNIQUE_ID); + columnList.add(tableName + "." + NAME); + columnList.add(tableName + "." + NATIONAL_ID); + columnList.add(tableName + "." + DBConstants.KEY.DOB); + columnList.add(tableName + "." + REMOVE_REASON); + columnList.add(tableName + "." + DATE_DIED); + columnList.add(tableName + "." + DEATH_PLACE); + columnList.add(tableName + "." + NATIONALITY); + columnList.add(tableName + "." + MARITAL_STATUS); + columnList.add(tableName + "." + DBConstants.KEY.LAST_INTERACTED_WITH); + columnList.add(tableName + "." + DEATH_CERTIFICATE_NUMBER); + return columnList.toArray(new String[columnList.size()]); + } + + public interface Flavor { + String[] getOneYearVaccines(); + String[] getTwoYearVaccines(); + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/PhoneNumberFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/PhoneNumberFlv.java new file mode 100644 index 0000000000..e82a5a491e --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/PhoneNumberFlv.java @@ -0,0 +1,10 @@ +package org.smartregister.chw.util; + +import org.smartregister.chw.core.adapter.MemberAdapter; + +public class PhoneNumberFlv implements MemberAdapter.Flavor { + @Override + public boolean isPhoneNumberLength16Digit() { + return true; + } +} diff --git a/opensrp-chw/src/crvs/java/org/smartregister/chw/util/RepositoryUtilsFlv.java b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/RepositoryUtilsFlv.java new file mode 100644 index 0000000000..e658fbcdbf --- /dev/null +++ b/opensrp-chw/src/crvs/java/org/smartregister/chw/util/RepositoryUtilsFlv.java @@ -0,0 +1,15 @@ +package org.smartregister.chw.util; + +import org.smartregister.chw.anc.repository.VisitDetailsRepository; +import org.smartregister.chw.anc.repository.VisitRepository; + +public interface RepositoryUtilsFlv { + + String[] DROP_VISITS_INFO_TABLES = { + "DROP TABLE " + VisitRepository.VISIT_TABLE + ";", + "DROP TABLE " + VisitDetailsRepository.VISIT_DETAILS_TABLE + ";", + }; + + String addLbwColumnQuery = "ALTER TABLE ec_child ADD COLUMN low_birth_weight VARCHAR;"; + String ADD_DEATH_CAUSE_COL_QUERY = "ALTER TABLE ec_family_member ADD COLUMN death_cause VARCHAR;"; +} diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/form_immunization.png b/opensrp-chw/src/crvs/res/drawable-hdpi/form_immunization.png new file mode 100644 index 0000000000..9982481451 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/form_immunization.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/form_iptp_sp.png b/opensrp-chw/src/crvs/res/drawable-hdpi/form_iptp_sp.png new file mode 100644 index 0000000000..98270bd6a3 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/form_iptp_sp.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/form_llitn.png b/opensrp-chw/src/crvs/res/drawable-hdpi/form_llitn.png new file mode 100644 index 0000000000..9ac2a2c1b6 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/form_llitn.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/form_received_card.png b/opensrp-chw/src/crvs/res/drawable-hdpi/form_received_card.png new file mode 100644 index 0000000000..6e7de7cc8b Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/form_received_card.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher.png b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000..b57015d7af Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher_foreground.png b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..974778623f Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher_foreground.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher_round.png b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000..b57015d7af Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_launcher_round.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-hdpi/ic_logo.png b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_logo.png new file mode 100644 index 0000000000..179793ab4c Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-hdpi/ic_logo.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-ldpi/form_iptp_sp.png b/opensrp-chw/src/crvs/res/drawable-ldpi/form_iptp_sp.png new file mode 100644 index 0000000000..c8a0809396 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-ldpi/form_iptp_sp.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-ldpi/form_llitn.png b/opensrp-chw/src/crvs/res/drawable-ldpi/form_llitn.png new file mode 100644 index 0000000000..942ab6a124 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-ldpi/form_llitn.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-ldpi/form_received_card.png b/opensrp-chw/src/crvs/res/drawable-ldpi/form_received_card.png new file mode 100644 index 0000000000..96c0571e89 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-ldpi/form_received_card.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/form_immunization.png b/opensrp-chw/src/crvs/res/drawable-mdpi/form_immunization.png new file mode 100644 index 0000000000..4a379012a9 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/form_immunization.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/form_iptp_sp.png b/opensrp-chw/src/crvs/res/drawable-mdpi/form_iptp_sp.png new file mode 100644 index 0000000000..ddf5096cc8 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/form_iptp_sp.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/form_llitn.png b/opensrp-chw/src/crvs/res/drawable-mdpi/form_llitn.png new file mode 100644 index 0000000000..7b8bbc1a4b Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/form_llitn.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/form_received_card.png b/opensrp-chw/src/crvs/res/drawable-mdpi/form_received_card.png new file mode 100644 index 0000000000..d2ee0b7ed1 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/form_received_card.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher.png b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000..442adb67d6 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher_foreground.png b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..c9367142b6 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher_foreground.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher_round.png b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000..442adb67d6 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_launcher_round.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-mdpi/ic_logo.png b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_logo.png new file mode 100644 index 0000000000..179793ab4c Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-mdpi/ic_logo.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/form_immunization.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_immunization.png new file mode 100644 index 0000000000..1a724e9450 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_immunization.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/form_iptp_sp.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_iptp_sp.png new file mode 100644 index 0000000000..b6e2b79e9f Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_iptp_sp.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/form_llitn.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_llitn.png new file mode 100644 index 0000000000..75a9a7522d Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_llitn.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/form_received_card.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_received_card.png new file mode 100644 index 0000000000..dfb8c91609 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/form_received_card.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000..8a4f40d77b Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher_foreground.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..4711979c3a Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher_foreground.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher_round.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..8a4f40d77b Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_launcher_round.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_logo.png b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_logo.png new file mode 100644 index 0000000000..179793ab4c Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xhdpi/ic_logo.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_immunization.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_immunization.png new file mode 100644 index 0000000000..23398797de Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_immunization.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_iptp_sp.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_iptp_sp.png new file mode 100644 index 0000000000..46864bb11f Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_iptp_sp.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_llitn.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_llitn.png new file mode 100644 index 0000000000..b4783a3341 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_llitn.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_received_card.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_received_card.png new file mode 100644 index 0000000000..ca835877a6 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/form_received_card.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000..5e75b52007 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher_foreground.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..1e36a85d5f Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher_foreground.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher_round.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..5e75b52007 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_launcher_round.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_logo.png b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_logo.png new file mode 100644 index 0000000000..179793ab4c Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxhdpi/ic_logo.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_immunization.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_immunization.png new file mode 100644 index 0000000000..1ad5c7cec7 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_immunization.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_iptp_sp.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_iptp_sp.png new file mode 100644 index 0000000000..c30890eb0e Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_iptp_sp.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_llitn.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_llitn.png new file mode 100644 index 0000000000..5b422c976c Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_llitn.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_received_card.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_received_card.png new file mode 100644 index 0000000000..560ed20fab Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/form_received_card.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000..4b332814ca Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher_foreground.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000..97e45cc4d7 Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher_foreground.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher_round.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000..4b332814ca Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_launcher_round.png differ diff --git a/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_logo.png b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_logo.png new file mode 100644 index 0000000000..179793ab4c Binary files /dev/null and b/opensrp-chw/src/crvs/res/drawable-xxxhdpi/ic_logo.png differ diff --git a/opensrp-chw/src/crvs/res/drawable/update_cert_status_btn.xml b/opensrp-chw/src/crvs/res/drawable/update_cert_status_btn.xml new file mode 100644 index 0000000000..a10359dc5a --- /dev/null +++ b/opensrp-chw/src/crvs/res/drawable/update_cert_status_btn.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/opensrp-chw/src/crvs/res/layout/activity_login.xml b/opensrp-chw/src/crvs/res/layout/activity_login.xml new file mode 100644 index 0000000000..f47221a764 --- /dev/null +++ b/opensrp-chw/src/crvs/res/layout/activity_login.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +