F3.2 Android: enviar Acta explícita en Hallazgos

This commit is contained in:
2026-09-07 16:13:52 -03:00
parent d7184ed537
commit 28f6fb3684
@@ -22,6 +22,7 @@ import retrofit2.http.Multipart
import retrofit2.http.POST import retrofit2.http.POST
import retrofit2.http.Part import retrofit2.http.Part
import retrofit2.http.Path import retrofit2.http.Path
import retrofit2.http.Query
import java.io.File import java.io.File
import java.time.Instant import java.time.Instant
@@ -100,12 +101,15 @@ data class FieldFindingEvidenceListResponse(
data class FieldFindingOptionsResponse( data class FieldFindingOptionsResponse(
val act: FieldFindingAct, val act: FieldFindingAct,
val capture: CaptureStatus = CaptureStatus(), val capture: CaptureStatus = CaptureStatus(),
val assetIncludedInAct: Boolean = true,
val catalog: FieldFindingCatalog, val catalog: FieldFindingCatalog,
val findings: List<FieldFindingItem> = emptyList(), val findings: List<FieldFindingItem> = emptyList(),
val canAddAnother: Boolean = true, val canAddAnother: Boolean = true,
val actSelectionMode: String = "EXPLICIT",
) )
data class CreateFieldFindingRequest( data class CreateFieldFindingRequest(
val actId: String,
val catalogItemId: String? = null, val catalogItemId: String? = null,
val customTitle: String? = null, val customTitle: String? = null,
val customLegalBasis: String? = null, val customLegalBasis: String? = null,
@@ -119,6 +123,7 @@ data class FieldFindingCreateResponse(
val capture: CaptureStatus = CaptureStatus(), val capture: CaptureStatus = CaptureStatus(),
val finding: FieldFindingItem, val finding: FieldFindingItem,
val canAddAnother: Boolean = true, val canAddAnother: Boolean = true,
val actSelectionMode: String = "EXPLICIT",
) )
private interface FieldFindingsApi { private interface FieldFindingsApi {
@@ -127,6 +132,7 @@ private interface FieldFindingsApi {
@Header("Authorization") authorization: String, @Header("Authorization") authorization: String,
@Path("visitId") visitId: String, @Path("visitId") visitId: String,
@Path("assetId") assetId: String, @Path("assetId") assetId: String,
@Query("actId") actId: String,
): FieldFindingOptionsResponse ): FieldFindingOptionsResponse
@POST("inspection-visits/{visitId}/field-findings/{assetId}") @POST("inspection-visits/{visitId}/field-findings/{assetId}")
@@ -166,7 +172,7 @@ private interface FieldFindingsApi {
/** /**
* Cliente de campo para Hallazgos y sus evidencias append-only. * Cliente de campo para Hallazgos y sus evidencias append-only.
* Comparte el almacén cifrado de sesión y nunca persiste la contraseña. * F3.2 exige que la APK identifique explícitamente el Acta activa.
*/ */
class FieldFindingsRepository(context: Context) { class FieldFindingsRepository(context: Context) {
private val store = SecureSessionStore(context.applicationContext) private val store = SecureSessionStore(context.applicationContext)
@@ -179,9 +185,9 @@ class FieldFindingsRepository(context: Context) {
.build() .build()
.create(FieldFindingsApi::class.java) .create(FieldFindingsApi::class.java)
suspend fun options(visitId: String, assetId: String): FieldFindingOptionsResponse = suspend fun options(visitId: String, assetId: String, actId: String): FieldFindingOptionsResponse =
authorized { session -> authorized { session ->
api.options("Bearer ${session.accessToken}", visitId, assetId) api.options("Bearer ${session.accessToken}", visitId, assetId, actId)
} }
suspend fun create( suspend fun create(