wedding-management-system

Android nativo (v1.1.0)

O inventário tela a tela, com diferenças ainda abertas, está em android-paridade.md.

O projeto android/ usa Kotlin, Jetpack Compose, Room/SQLite, DataStore e WorkManager. Seu applicationId e namespace são br.com.paivalab.weddingmanagementsystem, com minSdk 30 (Android 11+), targetSdk 36, versionCode 3 e versionName "1.1.0". O aplicativo roda 100% offline no aparelho sem depender de Next.js, Node/npm ou hospedagem externa.

O que está implementado

Qualidade, testes e limites conhecidos

Testes unitários e instrumentados verificam motores de domínio (PixBrCode, QrCodeMatrix, PaymentAdjustment, RiskRadar, GuestDemographics, VenueChecklistTemplates), Room, restauração nativa, fixture Python v2, arquivo corrompido e migração v1→v2. Uma cópia dos dados reais da Área de Trabalho passou pela importação no emulador Android e voltou a ser validada no web: 339 registros móveis, 10 arquivos, 31 tabelas web sem linhas alteradas e 10 hashes de uploads idênticos. Uma edição móvel de convidado sobreviveu ao ciclo web → Android → web → Android; um pacote criado em Android vazio também percorreu Android → web → Android com fornecedor, convidada e anexo.

O Room tem esquema v3 com migrações explícitas v1→v2→v3, testadas em emulador. Migrações futuras precisam de teste com esquema exportado; nunca usar fallbackToDestructiveMigration. A restauração substitui o banco em uma transação Room, incluindo BLOBs, e valida o pacote antes. O relatório CSV móvel exporta os campos essenciais de cada módulo e a alocação de mesas é feita por seletor de mesa (sem drag-and-drop gráfico).

Migração segura

Pare alterações no web, preserve o banco original e uploads/, e execute a ferramenta descrita em android/README.md (ou exporte .wfpbackup v2 direto em Ajustes → Backup completo no web). Confira o relatório/prévia e restaure o .wfpbackup no app Android. Compare contagens e anexos antes de desativar o servidor. Ao desligá-lo, os links públicos antigos de RSVP deixam de funcionar; no Android a resposta é registrada manualmente.

Assinatura e distribuição

A chave de produção (RSA 4096 bits) fica fora do Git (~/.android/wedding-planner-release.jks), referenciada localmente por android/keystore.properties (ignorado pelo Git). Quando keystore.properties está presente, ./gradlew :app:assembleRelease aplica R8/shrinking e assina automaticamente app-release.apk. A CI compila e valida assembleRelease sem a chave e publica o artefato de depuração; o APK assinado oficial (wedding-finance-planner-v1.1.0.apk) e seu arquivo .sha256 são publicados em GitHub Releases. Mantenha o mesmo applicationId (br.com.paivalab.weddingmanagementsystem) e certificado para atualizar versões futuras sem perder o banco local.