diff --git a/build.gradle b/build.gradle index 5580ec7..01701b0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,9 +19,9 @@ repositories { mavenCentral() } -project.version = "2025.1.1-SNAPSHOT" +project.version = "2025.1.2-SNAPSHOT" ext { - VERSION_CODE = 20250101 + VERSION_CODE = 20250102 } android { diff --git a/src/main/java/com/simprints/libsimprints/Tier.kt b/src/main/java/com/simprints/libsimprints/Tier.kt index 903fc85..38f1b79 100644 --- a/src/main/java/com/simprints/libsimprints/Tier.kt +++ b/src/main/java/com/simprints/libsimprints/Tier.kt @@ -1,6 +1,6 @@ package com.simprints.libsimprints -@Deprecated("Use contracts.data.Tier instead") +@Deprecated("Replaced by contracts.data.ConfidenceBand") enum class Tier { TIER_1, TIER_2, diff --git a/src/main/java/com/simprints/libsimprints/contracts/VersionsList.kt b/src/main/java/com/simprints/libsimprints/contracts/VersionsList.kt index 816d9b1..dfa0749 100644 --- a/src/main/java/com/simprints/libsimprints/contracts/VersionsList.kt +++ b/src/main/java/com/simprints/libsimprints/contracts/VersionsList.kt @@ -12,5 +12,5 @@ object VersionsList { * The new API uses JSON as marshalling format instead of parcelable to make * adding and removing data fields simpler. */ - const val INITIAL_REWORK = 20240801 + const val INITIAL_REWORK = 20250102 } diff --git a/src/main/java/com/simprints/libsimprints/contracts/data/ConfidenceBand.kt b/src/main/java/com/simprints/libsimprints/contracts/data/ConfidenceBand.kt new file mode 100644 index 0000000..9a16bf6 --- /dev/null +++ b/src/main/java/com/simprints/libsimprints/contracts/data/ConfidenceBand.kt @@ -0,0 +1,17 @@ +package com.simprints.libsimprints.contracts.data + +/** + * Qualifies how good is the specific confidence score based + * on the decision policy in the project configuration. + * + * HIGH - highly likely (near 100% confidence) to be a match + * MEDIUM - possible match but not 100% likely a match + * LOW - not a match + * NONE - fallback value when matching was not possible + */ +enum class ConfidenceBand { + HIGH, + MEDIUM, + LOW, + NONE, +} diff --git a/src/main/java/com/simprints/libsimprints/contracts/data/Identification.kt b/src/main/java/com/simprints/libsimprints/contracts/data/Identification.kt index a5f1cc0..2eca397 100644 --- a/src/main/java/com/simprints/libsimprints/contracts/data/Identification.kt +++ b/src/main/java/com/simprints/libsimprints/contracts/data/Identification.kt @@ -5,14 +5,14 @@ import org.json.JSONArray /** * This constructor creates a new identification * - * @param guid Global unique id of the verified person - * @param confidence An int containing the (matching) confidence - * @param tier The tier score derived from the confidence + * @param guid Global unique id of the verified person + * @param confidence An int containing the (matching) confidence + * @param confidenceBand Confidence qualifier based on the project's configuration */ data class Identification( val guid: String, val confidence: Float, - val tier: Tier, + val confidenceBand: ConfidenceBand, ) : Comparable { override fun compareTo(other: Identification): Int = when { confidence == other.confidence -> 0 @@ -22,22 +22,22 @@ data class Identification( companion object { private const val KEY_GUID = "guid" - private const val KEY_TIER = "tier" private const val KEY_CONFIDENCE = "confidence" + private const val KEY_CONFIDENCE_BAND = "confidenceBand" fun List.toJson(): String = map { id -> id.asJsonObject { json -> json.put(KEY_GUID, id.guid) - json.put(KEY_TIER, id.tier.name) + json.put(KEY_CONFIDENCE_BAND, id.confidenceBand.name) json.put(KEY_CONFIDENCE, id.confidence) } }.let { JSONArray(it) }.toString() fun fromJson(jsonString: String): List? = fromJsonArrayString(jsonString) { json -> val guid = json.getString(KEY_GUID) - val tier = json.getString(KEY_TIER).let { Tier.valueOf(it) } val confidence = json.getDouble(KEY_CONFIDENCE).toFloat() - Identification(guid, confidence, tier) + val band = json.getString(KEY_CONFIDENCE_BAND).let { ConfidenceBand.valueOf(it) } + Identification(guid, confidence, band) } } } diff --git a/src/main/java/com/simprints/libsimprints/contracts/data/Tier.kt b/src/main/java/com/simprints/libsimprints/contracts/data/Tier.kt deleted file mode 100644 index b85836e..0000000 --- a/src/main/java/com/simprints/libsimprints/contracts/data/Tier.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.simprints.libsimprints.contracts.data - -enum class Tier { - TIER_1, - TIER_2, - TIER_3, - TIER_4, - TIER_5, -} diff --git a/src/main/java/com/simprints/libsimprints/contracts/data/Verification.kt b/src/main/java/com/simprints/libsimprints/contracts/data/Verification.kt index ebab7e5..30016bf 100644 --- a/src/main/java/com/simprints/libsimprints/contracts/data/Verification.kt +++ b/src/main/java/com/simprints/libsimprints/contracts/data/Verification.kt @@ -5,34 +5,34 @@ package com.simprints.libsimprints.contracts.data * * @param guid Global unique id of the verified person * @param confidence An int containing the (matching) confidence - * @param tier The tier score derived from the confidence + * @param confidenceBand Confidence qualifier based on the project's configuration */ data class Verification( val guid: String, val confidence: Float, - val tier: Tier, + val confidenceBand: ConfidenceBand, val isSuccess: Boolean, ) { fun toJson(): String = asJsonObject { it.put(KEY_GUID, guid) - it.put(KEY_TIER, tier.name) + it.put(KEY_CONFIDENCE_BAND, confidenceBand.name) it.put(KEY_CONFIDENCE, confidence) it.put(KEY_IS_SUCCESS, isSuccess) }.toString() companion object { private const val KEY_GUID = "guid" - private const val KEY_TIER = "tier" private const val KEY_CONFIDENCE = "confidence" + private const val KEY_CONFIDENCE_BAND = "confidenceBand" private const val KEY_IS_SUCCESS = "isSuccess" fun fromJson(jsonString: String): Verification? = fromJsonString(jsonString) { json -> val guid = json.getString(KEY_GUID) - val tier = json.getString(KEY_TIER).let { Tier.valueOf(it) } val confidence = json.getDouble(KEY_CONFIDENCE).toFloat() + val band = json.getString(KEY_CONFIDENCE_BAND).let { ConfidenceBand.valueOf(it) } val isSuccess = json.getBoolean(KEY_IS_SUCCESS) - Verification(guid, confidence, tier, isSuccess) + Verification(guid, confidence, band, isSuccess) } } } diff --git a/src/test/java/com/simprints/libsimprints/contracts/SimprintsResponseTest.kt b/src/test/java/com/simprints/libsimprints/contracts/SimprintsResponseTest.kt index 195b467..33f6087 100644 --- a/src/test/java/com/simprints/libsimprints/contracts/SimprintsResponseTest.kt +++ b/src/test/java/com/simprints/libsimprints/contracts/SimprintsResponseTest.kt @@ -3,11 +3,11 @@ package com.simprints.libsimprints.contracts import android.content.Intent import androidx.test.ext.junit.runners.AndroidJUnit4 import com.simprints.libsimprints.Constants +import com.simprints.libsimprints.contracts.data.ConfidenceBand import com.simprints.libsimprints.contracts.data.Enrolment import com.simprints.libsimprints.contracts.data.Identification import com.simprints.libsimprints.contracts.data.Identification.Companion.toJson import com.simprints.libsimprints.contracts.data.RefusalForm -import com.simprints.libsimprints.contracts.data.Tier import com.simprints.libsimprints.contracts.data.Verification import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull @@ -83,7 +83,7 @@ class SimprintsResponseTest { fun `correctly parses identification intent`() { val intent = Intent().putExtra( Constants.SIMPRINTS_IDENTIFICATIONS, - listOf(Identification("guid", 42f, Tier.TIER_1)).toJson(), + listOf(Identification("guid", 42f, ConfidenceBand.HIGH)).toJson(), ) val result = SimprintsResponse.fromIntent(intent, Constants.SIMPRINTS_OK) @@ -98,7 +98,7 @@ class SimprintsResponseTest { fun `correctly parses verification intent`() { val intent = Intent().putExtra( Constants.SIMPRINTS_VERIFICATION, - Verification("guid", 42f, Tier.TIER_1, true).toJson(), + Verification("guid", 42f, ConfidenceBand.HIGH, true).toJson(), ) val result = SimprintsResponse.fromIntent(intent, Constants.SIMPRINTS_OK) diff --git a/src/test/java/com/simprints/libsimprints/contracts/data/IdentificationTest.kt b/src/test/java/com/simprints/libsimprints/contracts/data/IdentificationTest.kt index 79e6aac..b69dcd6 100644 --- a/src/test/java/com/simprints/libsimprints/contracts/data/IdentificationTest.kt +++ b/src/test/java/com/simprints/libsimprints/contracts/data/IdentificationTest.kt @@ -11,11 +11,10 @@ class IdentificationTest { @Test fun `test enrolment parcelling`() { val expected = listOf( - Identification("case1", 99f, Tier.TIER_1), - Identification("case2", 70f, Tier.TIER_2), - Identification("case3", 50f, Tier.TIER_3), - Identification("case4", 30f, Tier.TIER_4), - Identification("case5", 10f, Tier.TIER_5), + Identification("case1", 99f, ConfidenceBand.HIGH), + Identification("case2", 70f, ConfidenceBand.MEDIUM), + Identification("case3", 50f, ConfidenceBand.LOW), + Identification("case4", 30f, ConfidenceBand.NONE), ) val actual = Identification.fromJson(expected.toJson()) diff --git a/src/test/java/com/simprints/libsimprints/contracts/data/VerificationTest.kt b/src/test/java/com/simprints/libsimprints/contracts/data/VerificationTest.kt index e1d2fe1..016a0ff 100644 --- a/src/test/java/com/simprints/libsimprints/contracts/data/VerificationTest.kt +++ b/src/test/java/com/simprints/libsimprints/contracts/data/VerificationTest.kt @@ -9,7 +9,7 @@ import org.junit.runner.RunWith class VerificationTest { @Test fun `test verification parcelling`() { - val expected = Verification("case-id", 42f, Tier.TIER_4, false) + val expected = Verification("case-id", 42f, ConfidenceBand.HIGH, false) val actual = Verification.fromJson(expected.toJson()) Assert.assertEquals(expected, actual)