Flujo de Operaciones
Paso a paso de cómo se procesa y registra una operación típica en My Business Studio.
Registro de Transacción
Usuario crea registro
El usuario ingresa los datos de la transacción (monto, descripción, categoría, etc.) desde el dashboard de My Business Studio.
Backend valida
El servidor valida permisos de usuario, formato de datos, límites de presupuesto y reglas de negocio configuradas.
Cifrado y guardado
Los datos se cifran con AES-256-GCM y se guardan en Supabase con Row Level Security.
Hash generado
Se calcula el SHA-256 del registro cifrado para crear una huella digital única e irreversible.
Firmado digital
El hash se firma con la clave privada del usuario/departamento para garantizar autenticidad.
Enviado a Hedera
El mensaje firmado se publica en Hedera Consensus Service (HCS), quedando inmutable en la red.
TxId guardado
El ID de transacción de Hedera se enlaza al registro en Supabase para futuras verificaciones.
Ejemplo de Código
// Pseudocódigo simplificado
async function registerTransaction(data, userId) {
// 1. Validar permisos y datos
await validatePermissions(userId, data.departmentId)
await validateData(data)
// 2. Cifrar datos
const encrypted = await encrypt(data, MASTER_KEY)
// 3. Guardar en Supabase
const record = await supabase
.from('transactions')
.insert({ encrypted_data: encrypted, user_id: userId })
.select()
.single()
// 4. Generar hash
const hash = sha256(encrypted)
// 5. Firmar con clave de usuario
const signature = await sign(hash, userPrivateKey)
// 6. Publicar en Hedera HCS
const txResponse = await hederaClient.submitMessage({
topicId: COMPANY_TOPIC_ID,
message: JSON.stringify({
type: 'transaction',
hash,
signature,
timestamp: Date.now()
})
})
// 7. Enlazar txId
await supabase
.from('transactions')
.update({ hedera_tx_id: txResponse.transactionId })
.eq('id', record.id)
return { success: true, txId: txResponse.transactionId }
}Verificación
Para verificar la integridad de cualquier registro:
- 1Obtener el registro cifrado de Supabase
- 2Calcular SHA-256 de los datos cifrados
- 3Consultar el mensaje en Hedera usando el txId
- 4Comparar hashes: si coinciden, el registro no ha sido alterado