Some checks failed
Build / Build Backend (push) Has been cancelled
Build / Build Mobile (TypeScript Check) (push) Has been cancelled
Lint / Lint Backend (push) Has been cancelled
Lint / Lint Mobile (push) Has been cancelled
Test / Backend E2E Tests (push) Has been cancelled
Test / Mobile Unit Tests (push) Has been cancelled
Build / Build Docker Image (push) Has been cancelled
- Add exports module with PDF/CSV/Excel generation - Add reports module for inventory analytics - Add POS integrations module - Add database migrations for exports, movements and integrations - Add GitHub Actions CI/CD workflow with Docker support - Add mobile export and reports screens with tests - Update epic documentation with traceability - Add deployment and security guides Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
838 lines
22 KiB
YAML
838 lines
22 KiB
YAML
# MiInventario - Frontend Inventory (Mobile)
|
|
# Version: 3.0.0
|
|
# Actualizado: 2026-01-13
|
|
|
|
metadata:
|
|
proyecto: miinventario
|
|
componente: mobile
|
|
framework: React Native (Expo)
|
|
lenguaje: TypeScript
|
|
version_expo: "SDK 52"
|
|
navegacion: expo-router
|
|
estado_global: Zustand
|
|
version: "3.0.0"
|
|
estado: completado
|
|
creado: 2026-01-10
|
|
actualizado: 2026-01-13
|
|
actualizado_por: "Agente Arquitecto de Documentación"
|
|
|
|
# ===========================================
|
|
# RESUMEN
|
|
# ===========================================
|
|
resumen:
|
|
screens_implementados: 22
|
|
layouts_implementados: 11
|
|
stores_implementados: 9
|
|
services_implementados: 12
|
|
hooks_implementados: 2
|
|
componentes_ui: 3
|
|
componentes_skeletons: 4
|
|
componentes_validation: 3
|
|
componentes_feedback: 4
|
|
grupos_navegacion: 9
|
|
nota: "App mobile completa con expo-router, animaciones fluidas, modo offline y sistema de validación"
|
|
|
|
# ===========================================
|
|
# SCREENS IMPLEMENTADOS
|
|
# ===========================================
|
|
screens:
|
|
# Root
|
|
- nombre: index
|
|
ruta: "app/index.tsx"
|
|
ruta_expo: "/"
|
|
descripcion: "Entry point - redirige segun estado de auth"
|
|
estado: implementado
|
|
grupo: root
|
|
|
|
# Auth Flow
|
|
- nombre: login
|
|
ruta: "app/(auth)/login.tsx"
|
|
ruta_expo: "/(auth)/login"
|
|
descripcion: "Inicio de sesion con telefono"
|
|
estado: implementado
|
|
grupo: auth
|
|
|
|
- nombre: register
|
|
ruta: "app/(auth)/register.tsx"
|
|
ruta_expo: "/(auth)/register"
|
|
descripcion: "Registro de nuevo usuario"
|
|
estado: implementado
|
|
grupo: auth
|
|
|
|
- nombre: verify-otp
|
|
ruta: "app/(auth)/verify-otp.tsx"
|
|
ruta_expo: "/(auth)/verify-otp"
|
|
descripcion: "Verificacion de codigo OTP"
|
|
estado: implementado
|
|
grupo: auth
|
|
|
|
# Tabs (Main Navigation)
|
|
- nombre: home
|
|
ruta: "app/(tabs)/index.tsx"
|
|
ruta_expo: "/(tabs)"
|
|
descripcion: "Dashboard principal con resumen"
|
|
estado: implementado
|
|
grupo: tabs
|
|
es_tab: true
|
|
|
|
- nombre: scan
|
|
ruta: "app/(tabs)/scan.tsx"
|
|
ruta_expo: "/(tabs)/scan"
|
|
descripcion: "Captura de video para inventario"
|
|
estado: implementado
|
|
grupo: tabs
|
|
es_tab: true
|
|
dependencias: [expo-camera, expo-av]
|
|
|
|
- nombre: inventory
|
|
ruta: "app/(tabs)/inventory.tsx"
|
|
ruta_expo: "/(tabs)/inventory"
|
|
descripcion: "Lista de items de inventario"
|
|
estado: implementado
|
|
grupo: tabs
|
|
es_tab: true
|
|
|
|
- nombre: profile
|
|
ruta: "app/(tabs)/profile.tsx"
|
|
ruta_expo: "/(tabs)/profile"
|
|
descripcion: "Perfil de usuario y configuracion"
|
|
estado: implementado
|
|
grupo: tabs
|
|
es_tab: true
|
|
|
|
# Credits
|
|
- nombre: credits/buy
|
|
ruta: "app/credits/buy.tsx"
|
|
ruta_expo: "/credits/buy"
|
|
descripcion: "Compra de paquetes de creditos"
|
|
estado: implementado
|
|
grupo: credits
|
|
|
|
- nombre: credits/history
|
|
ruta: "app/credits/history.tsx"
|
|
ruta_expo: "/credits/history"
|
|
descripcion: "Historial de transacciones de creditos"
|
|
estado: implementado
|
|
grupo: credits
|
|
|
|
# Stores
|
|
- nombre: stores/index
|
|
ruta: "app/stores/index.tsx"
|
|
ruta_expo: "/stores"
|
|
descripcion: "Lista de tiendas del usuario"
|
|
estado: implementado
|
|
grupo: stores
|
|
|
|
- nombre: stores/new
|
|
ruta: "app/stores/new.tsx"
|
|
ruta_expo: "/stores/new"
|
|
descripcion: "Crear nueva tienda"
|
|
estado: implementado
|
|
grupo: stores
|
|
|
|
- nombre: stores/[id]
|
|
ruta: "app/stores/[id].tsx"
|
|
ruta_expo: "/stores/:id"
|
|
descripcion: "Detalle y edicion de tienda"
|
|
estado: implementado
|
|
grupo: stores
|
|
parametros: [id]
|
|
|
|
# Inventory Items
|
|
- nombre: inventory/[id]
|
|
ruta: "app/inventory/[id].tsx"
|
|
ruta_expo: "/inventory/:id"
|
|
descripcion: "Detalle de item de inventario"
|
|
estado: implementado
|
|
grupo: inventory
|
|
parametros: [id]
|
|
|
|
# Notifications
|
|
- nombre: notifications/index
|
|
ruta: "app/notifications/index.tsx"
|
|
ruta_expo: "/notifications"
|
|
descripcion: "Lista de notificaciones"
|
|
estado: implementado
|
|
grupo: notifications
|
|
|
|
# Referrals
|
|
- nombre: referrals/index
|
|
ruta: "app/referrals/index.tsx"
|
|
ruta_expo: "/referrals"
|
|
descripcion: "Codigo de referido y estadisticas"
|
|
estado: implementado
|
|
grupo: referrals
|
|
|
|
# Profile
|
|
- nombre: profile/edit
|
|
ruta: "app/profile/edit.tsx"
|
|
ruta_expo: "/profile/edit"
|
|
descripcion: "Edicion de perfil de usuario"
|
|
estado: implementado
|
|
grupo: profile
|
|
|
|
# Payments
|
|
- nombre: payments/methods
|
|
ruta: "app/payments/methods.tsx"
|
|
ruta_expo: "/payments/methods"
|
|
descripcion: "Metodos de pago disponibles"
|
|
estado: implementado
|
|
grupo: payments
|
|
|
|
# Help
|
|
- nombre: help/index
|
|
ruta: "app/help/index.tsx"
|
|
ruta_expo: "/help"
|
|
descripcion: "Centro de ayuda y FAQ"
|
|
estado: implementado
|
|
grupo: help
|
|
|
|
# Support
|
|
- nombre: support/index
|
|
ruta: "app/support/index.tsx"
|
|
ruta_expo: "/support"
|
|
descripcion: "Soporte y contacto"
|
|
estado: implementado
|
|
grupo: support
|
|
|
|
# Legal
|
|
- nombre: legal/terms
|
|
ruta: "app/legal/terms.tsx"
|
|
ruta_expo: "/legal/terms"
|
|
descripcion: "Terminos y condiciones"
|
|
estado: implementado
|
|
grupo: legal
|
|
|
|
- nombre: legal/privacy
|
|
ruta: "app/legal/privacy.tsx"
|
|
ruta_expo: "/legal/privacy"
|
|
descripcion: "Politica de privacidad"
|
|
estado: implementado
|
|
grupo: legal
|
|
|
|
# Validation
|
|
- nombre: validation/items
|
|
ruta: "app/validation/items.tsx"
|
|
ruta_expo: "/validation/items"
|
|
descripcion: "Lista de items pendientes de validacion"
|
|
estado: implementado
|
|
grupo: validation
|
|
|
|
- nombre: validation/complete
|
|
ruta: "app/validation/complete.tsx"
|
|
ruta_expo: "/validation/complete"
|
|
descripcion: "Pantalla de validacion completada"
|
|
estado: implementado
|
|
grupo: validation
|
|
|
|
# ===========================================
|
|
# LAYOUTS (expo-router)
|
|
# ===========================================
|
|
layouts:
|
|
- nombre: _layout (root)
|
|
ruta: "app/_layout.tsx"
|
|
descripcion: "Layout raiz con providers globales"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (auth)
|
|
ruta: "app/(auth)/_layout.tsx"
|
|
descripcion: "Layout para flujo de autenticacion"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (tabs)
|
|
ruta: "app/(tabs)/_layout.tsx"
|
|
descripcion: "Layout con tab navigation"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (credits)
|
|
ruta: "app/credits/_layout.tsx"
|
|
descripcion: "Layout para seccion de creditos"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (stores)
|
|
ruta: "app/stores/_layout.tsx"
|
|
descripcion: "Layout para seccion de tiendas"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (inventory)
|
|
ruta: "app/inventory/_layout.tsx"
|
|
descripcion: "Layout para detalle de inventario"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (notifications)
|
|
ruta: "app/notifications/_layout.tsx"
|
|
descripcion: "Layout para notificaciones"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (referrals)
|
|
ruta: "app/referrals/_layout.tsx"
|
|
descripcion: "Layout para referidos"
|
|
estado: implementado
|
|
|
|
- nombre: _layout (validation)
|
|
ruta: "app/validation/_layout.tsx"
|
|
descripcion: "Layout para flujo de validacion"
|
|
estado: implementado
|
|
|
|
# ===========================================
|
|
# HOOKS PERSONALIZADOS
|
|
# ===========================================
|
|
hooks:
|
|
- nombre: useAnimations
|
|
archivo: "src/hooks/useAnimations.ts"
|
|
descripcion: "Coleccion de hooks para animaciones con react-native-reanimated"
|
|
estado: implementado
|
|
exports:
|
|
- useFadeIn
|
|
- useSlideIn
|
|
- useSlideFromRight
|
|
- usePressScale
|
|
- useListItemAnimation
|
|
- useShimmer
|
|
- usePulse
|
|
- useToggleAnimation
|
|
- Animated
|
|
|
|
- nombre: useNetworkStatus
|
|
archivo: "src/hooks/useNetworkStatus.ts"
|
|
descripcion: "Hooks para detectar estado de conexion de red"
|
|
estado: implementado
|
|
exports:
|
|
- useNetworkStatus
|
|
- useIsOnline
|
|
- useIsOffline
|
|
|
|
# ===========================================
|
|
# SISTEMA DE TEMAS
|
|
# ===========================================
|
|
theme:
|
|
- nombre: ThemeContext
|
|
archivo: "src/theme/ThemeContext.tsx"
|
|
descripcion: "Sistema de temas con soporte light/dark mode"
|
|
estado: implementado
|
|
exports:
|
|
- ThemeColors
|
|
- Theme
|
|
- ThemeProvider
|
|
- useTheme
|
|
- useColors
|
|
|
|
# ===========================================
|
|
# COMPONENTES UI
|
|
# ===========================================
|
|
componentes_ui:
|
|
- nombre: Skeleton
|
|
archivo: "src/components/ui/Skeleton.tsx"
|
|
descripcion: "Componentes skeleton base con animacion shimmer"
|
|
estado: implementado
|
|
exports:
|
|
- Skeleton
|
|
- SkeletonText
|
|
- SkeletonCircle
|
|
- SkeletonImage
|
|
- SkeletonCard
|
|
- SkeletonListItem
|
|
- SkeletonStat
|
|
- SkeletonList
|
|
|
|
- nombre: OfflineBanner
|
|
archivo: "src/components/ui/OfflineBanner.tsx"
|
|
descripcion: "Banner animado para indicar modo offline"
|
|
estado: implementado
|
|
exports:
|
|
- OfflineBanner
|
|
- WithOfflineBanner
|
|
|
|
- nombre: AnimatedList
|
|
archivo: "src/components/ui/AnimatedList.tsx"
|
|
descripcion: "FlatList con animaciones de entrada staggered"
|
|
estado: implementado
|
|
exports:
|
|
- AnimatedList
|
|
- useListItemEntering
|
|
- AnimatedListItem
|
|
|
|
# ===========================================
|
|
# COMPONENTES SKELETON
|
|
# ===========================================
|
|
componentes_skeletons:
|
|
- nombre: InventoryItemSkeleton
|
|
archivo: "src/components/skeletons/InventoryItemSkeleton.tsx"
|
|
descripcion: "Skeletons para lista de inventario"
|
|
estado: implementado
|
|
exports:
|
|
- InventoryItemSkeleton
|
|
- InventoryListSkeleton
|
|
- InventoryStatsSkeleton
|
|
|
|
- nombre: StoreCardSkeleton
|
|
archivo: "src/components/skeletons/StoreCardSkeleton.tsx"
|
|
descripcion: "Skeletons para tarjetas de tienda"
|
|
estado: implementado
|
|
exports:
|
|
- StoreCardSkeleton
|
|
- StoreListSkeleton
|
|
|
|
- nombre: CreditCardSkeleton
|
|
archivo: "src/components/skeletons/CreditCardSkeleton.tsx"
|
|
descripcion: "Skeletons para seccion de creditos"
|
|
estado: implementado
|
|
exports:
|
|
- CreditBalanceSkeleton
|
|
- TransactionSkeleton
|
|
- TransactionListSkeleton
|
|
- CreditPackageSkeleton
|
|
- CreditPackageListSkeleton
|
|
|
|
- nombre: NotificationSkeleton
|
|
archivo: "src/components/skeletons/NotificationSkeleton.tsx"
|
|
descripcion: "Skeletons para lista de notificaciones"
|
|
estado: implementado
|
|
exports:
|
|
- NotificationItemSkeleton
|
|
- NotificationListSkeleton
|
|
- NotificationHeaderSkeleton
|
|
|
|
# ===========================================
|
|
# COMPONENTES VALIDATION
|
|
# ===========================================
|
|
componentes_validation:
|
|
- nombre: ValidationPromptModal
|
|
archivo: "src/components/validation/ValidationPromptModal.tsx"
|
|
descripcion: "Modal para iniciar flujo de validacion"
|
|
estado: implementado
|
|
exports:
|
|
- ValidationPromptModal
|
|
|
|
- nombre: ValidationItemCard
|
|
archivo: "src/components/validation/ValidationItemCard.tsx"
|
|
descripcion: "Tarjeta de item en validacion"
|
|
estado: implementado
|
|
exports:
|
|
- ValidationItemCard
|
|
|
|
- nombre: ValidationProgressBar
|
|
archivo: "src/components/validation/ValidationProgressBar.tsx"
|
|
descripcion: "Barra de progreso de validacion"
|
|
estado: implementado
|
|
exports:
|
|
- ValidationProgressBar
|
|
|
|
# ===========================================
|
|
# COMPONENTES FEEDBACK
|
|
# ===========================================
|
|
componentes_feedback:
|
|
- nombre: ConfirmItemButton
|
|
archivo: "src/components/feedback/ConfirmItemButton.tsx"
|
|
descripcion: "Boton para confirmar item correcto"
|
|
estado: implementado
|
|
exports:
|
|
- ConfirmItemButton
|
|
|
|
- nombre: CorrectionHistoryCard
|
|
archivo: "src/components/feedback/CorrectionHistoryCard.tsx"
|
|
descripcion: "Tarjeta de historial de correcciones"
|
|
estado: implementado
|
|
exports:
|
|
- CorrectionHistoryCard
|
|
|
|
- nombre: CorrectSkuModal
|
|
archivo: "src/components/feedback/CorrectSkuModal.tsx"
|
|
descripcion: "Modal para corregir SKU de item"
|
|
estado: implementado
|
|
exports:
|
|
- CorrectSkuModal
|
|
|
|
- nombre: CorrectQuantityModal
|
|
archivo: "src/components/feedback/CorrectQuantityModal.tsx"
|
|
descripcion: "Modal para corregir cantidad de item"
|
|
estado: implementado
|
|
exports:
|
|
- CorrectQuantityModal
|
|
|
|
# ===========================================
|
|
# STORES (Zustand)
|
|
# ===========================================
|
|
stores:
|
|
- nombre: useAuthStore
|
|
archivo: "stores/auth.store.ts"
|
|
descripcion: "Estado de autenticacion y sesion"
|
|
estado: implementado
|
|
persistencia: "expo-secure-store"
|
|
acciones:
|
|
- login
|
|
- logout
|
|
- register
|
|
- verifyOtp
|
|
- refreshToken
|
|
- setUser
|
|
|
|
- nombre: useCreditsStore
|
|
archivo: "stores/credits.store.ts"
|
|
descripcion: "Balance y transacciones de creditos"
|
|
estado: implementado
|
|
persistencia: "miinventario-credits"
|
|
limite_cache: 50
|
|
acciones:
|
|
- fetchBalance
|
|
- fetchPackages
|
|
- fetchTransactions
|
|
|
|
- nombre: useInventoryStore
|
|
archivo: "stores/inventory.store.ts"
|
|
descripcion: "Items de inventario"
|
|
estado: implementado
|
|
persistencia: "miinventario-inventory"
|
|
limite_cache: 100
|
|
acciones:
|
|
- fetchItems
|
|
- updateItem
|
|
- deleteItem
|
|
- fetchStatistics
|
|
- fetchLowStock
|
|
|
|
- nombre: useNotificationsStore
|
|
archivo: "stores/notifications.store.ts"
|
|
descripcion: "Notificaciones del usuario"
|
|
estado: implementado
|
|
persistencia: "miinventario-notifications"
|
|
limite_cache: 50
|
|
acciones:
|
|
- fetchNotifications
|
|
- markAsRead
|
|
- markAllAsRead
|
|
- fetchUnreadCount
|
|
|
|
- nombre: usePaymentsStore
|
|
archivo: "stores/payments.store.ts"
|
|
descripcion: "Historial de pagos"
|
|
estado: implementado
|
|
acciones:
|
|
- fetchPayments
|
|
- createPayment
|
|
- fetchPaymentDetail
|
|
|
|
- nombre: useReferralsStore
|
|
archivo: "stores/referrals.store.ts"
|
|
descripcion: "Sistema de referidos"
|
|
estado: implementado
|
|
acciones:
|
|
- fetchMyCode
|
|
- fetchStats
|
|
- fetchReferrals
|
|
- applyCode
|
|
|
|
- nombre: useStoresStore
|
|
archivo: "stores/stores.store.ts"
|
|
descripcion: "Tiendas del usuario"
|
|
estado: implementado
|
|
persistencia: "miinventario-stores"
|
|
acciones:
|
|
- fetchStores
|
|
- createStore
|
|
- updateStore
|
|
- deleteStore
|
|
- setCurrentStore
|
|
|
|
- nombre: useValidationsStore
|
|
archivo: "stores/validations.store.ts"
|
|
descripcion: "Estado de validaciones de inventario"
|
|
estado: implementado
|
|
persistencia: "miinventario-validations"
|
|
acciones:
|
|
- fetchPendingValidations
|
|
- validateItem
|
|
- skipItem
|
|
- completeValidation
|
|
- resetValidation
|
|
|
|
- nombre: useFeedbackStore
|
|
archivo: "stores/feedback.store.ts"
|
|
descripcion: "Feedback y correcciones de usuario"
|
|
estado: implementado
|
|
persistencia: "miinventario-feedback"
|
|
acciones:
|
|
- submitCorrection
|
|
- fetchCorrectionHistory
|
|
- confirmItem
|
|
- rejectItem
|
|
|
|
# ===========================================
|
|
# SERVICES (API)
|
|
# ===========================================
|
|
services:
|
|
- nombre: client
|
|
archivo: "services/api/client.ts"
|
|
descripcion: "Cliente base Axios con interceptors"
|
|
estado: implementado
|
|
notas: "Maneja tokens, refresh automatico, errores"
|
|
|
|
- nombre: authService
|
|
archivo: "services/api/auth.service.ts"
|
|
descripcion: "Endpoints de autenticacion"
|
|
estado: implementado
|
|
endpoints:
|
|
- POST /auth/register
|
|
- POST /auth/verify-otp
|
|
- POST /auth/login
|
|
- POST /auth/refresh
|
|
- POST /auth/logout
|
|
|
|
- nombre: usersService
|
|
archivo: "services/api/users.service.ts"
|
|
descripcion: "Endpoints de usuarios"
|
|
estado: implementado
|
|
endpoints:
|
|
- GET /users/me
|
|
- PATCH /users/me
|
|
- PATCH /users/me/fcm-token
|
|
|
|
- nombre: storesService
|
|
archivo: "services/api/stores.service.ts"
|
|
descripcion: "Endpoints de tiendas"
|
|
estado: implementado
|
|
endpoints:
|
|
- POST /stores
|
|
- GET /stores
|
|
- GET /stores/:id
|
|
- PATCH /stores/:id
|
|
- DELETE /stores/:id
|
|
|
|
- nombre: inventoryService
|
|
archivo: "services/api/inventory.service.ts"
|
|
descripcion: "Endpoints de inventario"
|
|
estado: implementado
|
|
endpoints:
|
|
- GET /stores/:storeId/inventory
|
|
- GET /stores/:storeId/inventory/statistics
|
|
- GET /stores/:storeId/inventory/low-stock
|
|
- GET /stores/:storeId/inventory/categories
|
|
- GET /stores/:storeId/inventory/:itemId
|
|
- PATCH /stores/:storeId/inventory/:itemId
|
|
- DELETE /stores/:storeId/inventory/:itemId
|
|
|
|
- nombre: videosService
|
|
archivo: "services/api/videos.service.ts"
|
|
descripcion: "Endpoints de videos"
|
|
estado: implementado
|
|
endpoints:
|
|
- POST /stores/:storeId/videos/initiate
|
|
- POST /stores/:storeId/videos/:videoId/confirm
|
|
- GET /stores/:storeId/videos/:videoId/status
|
|
- GET /stores/:storeId/videos/:videoId/result
|
|
- GET /stores/:storeId/videos
|
|
|
|
- nombre: creditsService
|
|
archivo: "services/api/credits.service.ts"
|
|
descripcion: "Endpoints de creditos"
|
|
estado: implementado
|
|
endpoints:
|
|
- GET /credits/balance
|
|
- GET /credits/transactions
|
|
- GET /credits/packages
|
|
|
|
- nombre: paymentsService
|
|
archivo: "services/api/payments.service.ts"
|
|
descripcion: "Endpoints de pagos"
|
|
estado: implementado
|
|
endpoints:
|
|
- POST /payments
|
|
- GET /payments
|
|
- GET /payments/:paymentId
|
|
|
|
- nombre: referralsService
|
|
archivo: "services/api/referrals.service.ts"
|
|
descripcion: "Endpoints de referidos"
|
|
estado: implementado
|
|
endpoints:
|
|
- GET /referrals/my-code
|
|
- GET /referrals/stats
|
|
- GET /referrals
|
|
- GET /referrals/validate
|
|
- POST /referrals/apply
|
|
|
|
- nombre: notificationsService
|
|
archivo: "services/api/notifications.service.ts"
|
|
descripcion: "Endpoints de notificaciones"
|
|
estado: implementado
|
|
endpoints:
|
|
- GET /notifications
|
|
- GET /notifications/unread-count
|
|
- PATCH /notifications/:id/read
|
|
- POST /notifications/mark-all-read
|
|
- POST /notifications/register-token
|
|
|
|
- nombre: validationsService
|
|
archivo: "services/api/validations.service.ts"
|
|
descripcion: "Endpoints de validaciones de inventario"
|
|
estado: implementado
|
|
endpoints:
|
|
- GET /stores/:storeId/validations/pending
|
|
- POST /stores/:storeId/validations/:itemId/validate
|
|
- POST /stores/:storeId/validations/:itemId/skip
|
|
- POST /stores/:storeId/validations/complete
|
|
|
|
- nombre: feedbackService
|
|
archivo: "services/api/feedback.service.ts"
|
|
descripcion: "Endpoints de feedback y correcciones"
|
|
estado: implementado
|
|
endpoints:
|
|
- POST /stores/:storeId/feedback/correction
|
|
- GET /stores/:storeId/feedback/history
|
|
- POST /stores/:storeId/feedback/:itemId/confirm
|
|
- POST /stores/:storeId/feedback/:itemId/reject
|
|
|
|
# ===========================================
|
|
# NAVIGATION STRUCTURE
|
|
# ===========================================
|
|
navigation:
|
|
tipo: expo-router (file-based)
|
|
grupos:
|
|
- nombre: (auth)
|
|
tipo: stack
|
|
screens: [login, register, verify-otp]
|
|
protegido: false
|
|
|
|
- nombre: (tabs)
|
|
tipo: tabs
|
|
screens: [index, scan, inventory, profile]
|
|
protegido: true
|
|
|
|
- nombre: credits
|
|
tipo: stack
|
|
screens: [buy, history]
|
|
protegido: true
|
|
|
|
- nombre: stores
|
|
tipo: stack
|
|
screens: [index, new, "[id]"]
|
|
protegido: true
|
|
|
|
- nombre: inventory
|
|
tipo: stack
|
|
screens: ["[id]"]
|
|
protegido: true
|
|
|
|
- nombre: notifications
|
|
tipo: stack
|
|
screens: [index]
|
|
protegido: true
|
|
|
|
- nombre: referrals
|
|
tipo: stack
|
|
screens: [index]
|
|
protegido: true
|
|
|
|
- nombre: legal
|
|
tipo: stack
|
|
screens: [terms, privacy]
|
|
protegido: false
|
|
|
|
- nombre: validation
|
|
tipo: stack
|
|
screens: [items, complete]
|
|
protegido: true
|
|
|
|
# ===========================================
|
|
# TIPOS COMPARTIDOS
|
|
# ===========================================
|
|
types:
|
|
archivo: "types/index.ts"
|
|
descripcion: "Tipos TypeScript centralizados"
|
|
estado: implementado
|
|
interfaces:
|
|
- User
|
|
- Store
|
|
- InventoryItem
|
|
- Video
|
|
- CreditBalance
|
|
- CreditPackage
|
|
- CreditTransaction
|
|
- Payment
|
|
- Referral
|
|
- Notification
|
|
- ApiResponse
|
|
- PaginatedResponse
|
|
|
|
# ===========================================
|
|
# DEPENDENCIAS PRINCIPALES
|
|
# ===========================================
|
|
dependencias:
|
|
navegacion:
|
|
- expo-router
|
|
estado:
|
|
- zustand
|
|
- "@react-native-async-storage/async-storage"
|
|
http:
|
|
- axios
|
|
ui:
|
|
- expo-status-bar
|
|
- "@expo/vector-icons"
|
|
media:
|
|
- expo-camera
|
|
- expo-av
|
|
- expo-image-picker
|
|
animaciones:
|
|
- react-native-reanimated
|
|
offline:
|
|
- "@react-native-async-storage/async-storage"
|
|
- "@react-native-community/netinfo"
|
|
otros:
|
|
- expo-secure-store
|
|
- expo-notifications
|
|
|
|
# ===========================================
|
|
# TESTS
|
|
# ===========================================
|
|
tests:
|
|
nota: "Tests unitarios pendientes de implementacion"
|
|
unit:
|
|
total: 0
|
|
pasando: 0
|
|
fallando: 0
|
|
|
|
e2e:
|
|
total: 0
|
|
pasando: 0
|
|
fallando: 0
|
|
|
|
# ===========================================
|
|
# CHANGELOG
|
|
# ===========================================
|
|
changelog:
|
|
- version: "1.0.0"
|
|
fecha: 2026-01-10
|
|
cambios:
|
|
- "Creacion inicial del inventario mobile"
|
|
- "Definicion de 16 screens planificados"
|
|
- "Identificacion de componentes y hooks"
|
|
|
|
- version: "2.0.0"
|
|
fecha: 2026-01-10
|
|
cambios:
|
|
- "Actualizacion completa con estado real implementado"
|
|
- "20 screens implementados con expo-router"
|
|
- "10 layouts de navegacion"
|
|
- "7 stores Zustand implementados"
|
|
- "10 servicios API implementados"
|
|
- "Estructura de navegacion documentada"
|
|
- "Tipos TypeScript centralizados"
|
|
|
|
- version: "3.0.0"
|
|
fecha: 2026-01-13
|
|
cambios:
|
|
- "Agregados 2 hooks personalizados (useAnimations, useNetworkStatus)"
|
|
- "Agregado sistema de temas (ThemeContext)"
|
|
- "Agregados 3 componentes UI (Skeleton, OfflineBanner, AnimatedList)"
|
|
- "Agregados 4 componentes skeleton especificos"
|
|
- "Actualizada persistencia en 4 stores con AsyncStorage"
|
|
- "Agregadas animaciones a Home e Inventory screens"
|
|
- "Agregado banner offline en layout raiz"
|
|
- "Nuevas dependencias: @react-native-community/netinfo"
|
|
- "Agregadas 3 screens de validacion (items, complete, _layout)"
|
|
- "Agregados 2 stores (validations.store.ts, feedback.store.ts)"
|
|
- "Agregados 2 services (validations.service.ts, feedback.service.ts)"
|
|
- "Agregados 3 componentes de validacion (ValidationPromptModal, ValidationItemCard, ValidationProgressBar)"
|
|
- "Agregados 4 componentes de feedback (ConfirmItemButton, CorrectionHistoryCard, CorrectSkuModal, CorrectQuantityModal)"
|
|
- "Total: 22 screens, 9 stores, 12 services, 7 nuevos componentes"
|