[
    "autonomous agent",
    {
        "bounce_fees": {
            "base": 150000
        },
        "init": "{
        $_Registre = '6UDN6TJX7AM3CTT6RSBVWW6K57WAKX4U';
       // Principals
        $adr__ = trigger.address;
        $args = trigger.data;
        $id_asset = trigger.output[[ asset != base ]].asset;
        $unitat = $id_asset == 'none' ? 'base' : $id_asset;
        $qt = trigger.output[[ asset = $unitat ]];
        $geto = $args.geto;
        $dades = {};
        $registre = {};
       // Abreviacions
        $proces = $args.proces;
        $ref = $args.ref;
        $val = $args.val;
        $idprop = $args.idprop;
        $adr = $args.adr;
        $estat = $args.estat;
        $qt_args = $args.qt;
       // Funcions
        // Retorna el valor d'una entrada del _Registre
        $__dada = $refdada =>
            data_feed [[
                oracles = $_Registre,
                feed_name = $refdada,
                ifnone = 0
            ]];
        /*
        // Retorna missatge referenciat
        $_Missatges = $args._Missatges otherwise $__dada( '_Missatges' );
        $__msg = $ordmsg => var[ $_Missatges ][ 'Portal_' || $ordmsg ];
        */
        // Obté valor argument requesta especificat o rebota
        $__arg = $arg =>
            $args[ $arg ] otherwise
            bounce( 'Cal proporcionar el valor de: ' || $arg );
       // Provisions
        $provisio = $__dada( 'Provisio' ) otherwise 6000;
        $romanent_min = $__dada( 'Romanent_Minim' ) otherwise 100000;
        $provisio_max = $provisio * 10;
        $provisio_min = $provisio / 10;
        $romanent_max = $romanent_min * 5;
        $__provisio = $rf => {
            $romanent = balance[ $rf ][ base ];
            $romanent < $romanent_min ?
            $provisio_max :
            $romanent > $romanent_max ?
            $provisio_min :
            $provisio
        };
       // Autoritzacions
        $procesos_auxiliars =
            "generacio, configuracio, convocatoria, validacio_TEST, nou_avis";
        $procesos_critics =
            "definicio, assignacio, traspas, inscripcio, " ||
            "nou_bloqueig, desbloqueig, " ||
            "nou_estat_geto, nou_estat_isox, nou_vincle, nou_estat_vincle";
        $procesos_admin_getons =
            "emissio, nou_definidor_geto, nova_capacitacio, atribucio, nou_avis_geto, " ||
            "nou_bloqueig_geto, desbloqueig_geto";
        $autoritzacio_basica = contains( $procesos_auxiliars, $proces );
        $autoritzacio_critica = contains( $procesos_critics, $proces );
        $autoritzacio_getons = contains( $procesos_admin_getons, $proces );
        $actuant_es_AUT_000 = $adr__ == $__dada( '_AUT_000' );
        $autoritzades =
            $__dada( '_AUT_A' ) || ' ' ||
            $__dada( '_AUT_B' ) || ' ' ||
            $__dada( '_AUT_C' );
        $actuant_autoritzada = contains( $autoritzades, $adr__ );
        if ( $autoritzacio_basica OR $autoritzacio_critica ) {
            $excepcio_provisional =
                $actuant_es_AUT_000 AND ! $__dada( '_AUT_0' );
            if ( ! $actuant_autoritzada AND ! $excepcio_provisional )
                bounce( 'No autoritzada' );
        }
        if ( $autoritzacio_getons ) {
            $excepcio_provisional =
                ( $actuant_autoritzada OR $actuant_es_AUT_000 )
                AND ! $__dada( $geto || '_AUT_0' );
            $autoritzades_geto =
                $__dada( $geto || '__AUT_A' ) || ' ' ||
                $__dada( $geto || '__AUT_B' ) || ' ' ||
                $__dada( $geto || '__AUT_C' );
            $autoritzada_geto = contains( $autoritzades_geto, $adr__ );
            if ( ! $autoritzada_geto AND ! $excepcio_provisional )
                bounce( 'No autoritzada per administrar el getó' );
        }
       // Valors instrumentals
        $_Accions = $__dada( '_Accions' );
        $_Convocatories = $__dada( '_Convocatories' );
        $_Pronunciaments = $__dada( '_Pronunciaments' );
        $_Getons = $__dada( '_Getons' );
        $_Vinculacions = $__dada( '_Vinculacions' );
        $_Implementacions = $__dada( '_Implementacions' );
        $_Emissions = $__dada( '_Emissions' );
        $_Avisos = $__dada( '_Avisos' );
        $id_estels = $__dada( 'Estels' );
        $_Calaix = $__dada( '_Calaix' );
        $_Capsa = $__dada( '_Capsa' );
        $origen = $__dada( 'Origen' );
        $interval = $__dada( 'Interval' );
        $cicle_actual = 1 + floor( ( timestamp - $origen ) / $interval );
        $provisio_Registre = $__provisio( $_Registre );
        $provisio_Implementacions = $__provisio( $_Implementacions );
        $provisio_Calaix = $__provisio( $_Calaix );
        $ordinal_proces = $__dada( 'ordinal_' || $proces ) + 1;
       // Operativitats >> getó / unitat
        $estat_geto = $__dada( $geto || '_estat' ) otherwise '';
        $geto_unitat = $__dada( 'geto_' || $unitat );
        $estat_unitat =
            $unitat == 'base' OR $unitat == $id_estels ?
            'operatiu' :
            $__dada( $geto_unitat || '_estat' );
        if ( $estat_unitat != 'operatiu' )
            bounce( 'Unitat desconeguda o no operativa' );
        if ( !! $geto AND $estat_geto != 'operatiu' AND $geto != 'Estels'
            AND ! contains( "nou_estat_geto, inscripcio, configuracio", $proces ) )
            bounce( 'Getó desconegut o no operatiu' );
       // Unitat utilitzada
        if ( $unitat != 'base' AND
                contains( 'definicio, donacio, assignacio, traspas, ' ||
                'generacio, configuracio, inscripcio, nou_estat_geto, ' ||
                'nova_isox, nou_estat_isox, nou_vincle, nou_estat_vincle, ' ||
                'nova_delegacio, final_delegacio', $proces ) )
            bounce ( "Per aquest procès, cal fer servir Bytes" );
       // Protocol Validació
        if ( $autoritzacio_critica OR $autoritzacio_getons ) {
            if ( $excepcio_provisional ) {
                $ordinal_drecera = $__dada( 'ordinal_drecera' ) + 1;
                $nova_iddrec = 'drecera_' || $ordinal_drecera;
                $dades[ 'ordinal_drecera' ] = $ordinal_drecera;
                $dades[ 'ordinal_' || $proces ] = $ordinal_proces;
                $dades[ $nova_iddrec ] = timestamp;
                $dades[ $nova_iddrec || '_actuant' ] = $adr__;
                $operacio = 'drecera';
            } else if ( !! $args.operacio AND $args.operacio == 'confirmacio' ) {
                // La proposta ha d'existir
                $temps_idprop = $__dada( $idprop )
                    otherwise bounce( "No hi ha cap proposta amb aquesta ref" );
                // La confirmació l'ha de fer una AUT diferent a la proposant
                if ( $__dada( $idprop || '_proposant' ) == $adr__ )
                    bounce( "El procés de confirmació l'ha d'endegar una altra AUT" );
                // La confirmació només es fer si ha transcorregut el lapse especificat
                if ( $__dada( 'Lapse' ) > timestamp - $temps_idprop )
                    bounce( "Encara no es pot confirmar la proposta" );
                // La proposta no pot constar com a refusada
                if ( !! $__dada( 'refus_' || $idprop ) )
                    bounce( "La proposta ha estat refusada" );
                // La proposta ha de constar com a validada
                if ( ! $__dada( 'validacio_' || $idprop ) )
                    bounce( "La proposta encara no ha estat validada" );
                $dades[ 'confirmacio_' || $idprop ] = timestamp;
                $dades[ 'confirmacio_' || $idprop || '_confirmant' ] = $adr__;
                $dades[ 'ordinal_' || $proces ] = $ordinal_proces;
                $operacio = 'confirmacio';
            } else {
                $ordinal_proposta = $__dada( 'ordinal_proposta' ) + 1;
                $nova_idprop = 'proposta_' || $ordinal_proposta;
                $dades[ 'ordinal_proposta' ] = $ordinal_proposta;
                $dades[ $nova_idprop ] = timestamp;
                $dades[ $nova_idprop || '_proposant' ] = $adr__;
                $dades[ $nova_idprop || '_proces' ] = $proces;
                $operacio = 'proposta';
            }
        }
       // * només x tests
        $args._Registre = $_Registre;
    }",
        "messages": {
            "cases": [
                {
                    "if": "{ $proces == 'definicio' }",
                    "init": "{
                    if ( $operacio == 'proposta' ) {
                        $dades[ $nova_idprop || '_ref' ] = $ref;
                        $dades[ $nova_idprop || '_val' ] = $val;
                    }
                    if ( $operacio == 'confirmacio' OR $operacio == 'drecera' ) {
                        $nova_ref = $__dada( $idprop || '_ref' ) otherwise $ref;
                        $nou_val = $__dada( $idprop || '_val' ) otherwise $val;
                        $dades[ $nova_ref ] = $nou_val;
                    }
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Proposta' ] =
                                $nova_idprop otherwise $idprop otherwise 'drecera';
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'acces_accions' }",
                    "init": "{
                    $accio = $args.accio;
                    if ($accio == 'Conversio' OR $accio == 'Retribucio') {
                        $geto_accio = $__dada( $ref || '_geto' ) otherwise bounce( $ref || ' inexistent' );
                    } else {
                        $geto_accio =
                            $unitat == $id_estels ?
                            'Estels':
                            $geto_unitat;
                    }
                    $_FOP_accio =
                        $geto_accio == 'Estels' ?
                        $_Calaix :
                        $_Capsa;
                    $estat_geto_accio =
                        $geto_accio == 'Estels' ?
                        'operatiu' :
                        $__dada( $geto_accio || '_estat' );
                    // Getó operatiu ?
                    if ( $estat_geto_accio != 'operatiu' )
                        bounce( "Getó no operatiu");
                    // Actuant activada ?
                    $activada_estels = $__dada( 'activacio_Estels_' || $adr__ );
                    $activada_geto = $__dada( 'activacio_' || $geto_accio || '_' || $adr__ );
                    if ( $accio == 'Activacio') {
                        if ( $geto_accio != 'Estels' AND ! $activada_estels )
                            bounce( 'No activada per a Estels' );
                    } else {
                        if ( ! $activada_estels )
                            bounce( 'No activada per a Estels' );
                        if ( $geto_accio != 'Estels' AND ! $activada_geto )
                            bounce( 'No activada per a ' || $geto_accio );
                    }
                    // Actuant bloquejada ?
                    $ref_bloqueig = 'bloqueig_' || $geto_accio || '_' || $adr__;
                    $ord_bloqueig = $__dada( $ref_bloqueig );
                    $text_bloqueig = $__dada( $ord_bloqueig || '_text' );
                    $cicle_bloqueig = $__dada( $ord_bloqueig || '_cicle') otherwise 0;
                    $ord_desbloqueig = $__dada( 'desbloqueig_' || $ref_bloqueig ) otherwise "cap"; 
                    $cicle_desbloqueig = $__dada( $ord_desbloqueig || '_cicle') otherwise 0;
                    $destinataria_bloquejada = $cicle_bloqueig > $cicle_desbloqueig;
                    // La configuració del getó determina si els bloquejos són permesos                    
                    $bloqueig_permes =
                        $geto_accio == 'Estels' OR $__dada( $geto_accio || '_bloqueig_permes' ) == 1;
                    if ( $bloqueig_permes AND $destinataria_bloquejada )
                        bounce( $text_bloqueig );
                    // Escala actual
                    $volum_escala = $__dada( 'volum_escala_' || $geto_accio );
                    $nombre_digits = length( $volum_escala ) otherwise 1;
                    $escala_actual = $__dada( 'escala_actual_' || $geto_accio ) otherwise 1;
                    $data_escala_actual = $__dada( 'data_escala_actual_' || $geto_accio );
                    if ( $nombre_digits > $escala_actual ) {
                        $nova_escala = $nombre_digits;
                        $interval_escala = 1000;
                    } else $interval_escala = timestamp - $data_escala_actual + 1000;
                
                    // Arguments
                    $estat_interficie =
                        $__dada( 'interficie_' || $args.interficie || '_estat' ) otherwise '-';
                    $estat_promotora =
                        $__dada( 'promotora_' || $args.promotora || '_estat' ) otherwise '-';
                    $args.interficie = $estat_interficie ==
                        'operatiu' ? $args.interficie : 'basica';
                    $args.promotora = $estat_promotora ==
                        'operatiu' ? $args.promotora : 'basica';
                    $args.cicle_actual = $cicle_actual;
                    $args._Calaix = $_Calaix;
                    $args.Estels = $id_estels;
                    $args.geto = $geto_accio;
                    $args._FOP_accio = $_FOP_accio;
                    $args.estat_geto = $estat_geto_accio;
                    $args.provisio_registre = $provisio_Registre;
                    $args.provisio_FOP = $__provisio( $_FOP_accio );
                    $args.volum_escala = $volum_escala;
                    $args.escala_actual = $escala_actual;
                    $args.nova_escala = $nova_escala;
                    $args.interval_escala = $interval_escala;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Accions }",
                                        "amount": "{ $__provisio( $_Accions ) }"
                                    },
                                    {
                                        "address": "{ $_FOP_accio }",
                                        "amount": "{ $__provisio( $_FOP_accio ) }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "{ $unitat }",
                                "outputs": [
                                    {
                                        "address": "{ $_Accions }",
                                        "amount": "{ $qt }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            // Avís per transmetre?
                            $ref_avis = 'avis_' || $geto_accio || '_' || $adr__;
                            $ord_avis = $__dada( $ref_avis );
                            $cicle_avis = $__dada( $ord_avis || '_cicle' );
                            $text_avis = $__dada( $ord_avis || '_text' );
                            if ( !! $text_avis AND $cicle_actual < ( $cicle_avis + 1 ) )
                                response[ 'AVÍS !' ] = $text_avis;
                            response[ 'Acció' ] = $accio;
                            response[ 'Procés' ] = $proces;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'donacio' }",
                    "init": "{
                    $donacio_minima = $__dada( 'Donacio_Minima' ) otherwise 1e9;
                    $factor_conversio = $__dada( 'Factor_Conversio' ) otherwise 1;
                    
                    if ( $qt_args < $donacio_minima )
                        bounce( 'La donació mínima és de ' || $donacio_minima );
                    $ref_donacio = 'donacio_' || $adr__;
                    $ord_donacio = 'donacio_' || $ordinal_proces;
                    $total_donacions = $__dada( 'total_donacions' ) otherwise 0;
                    $dades[ $ref_donacio ] = $ord_donacio;
                    $dades[ $ord_donacio || '_donant' ] = $adr__;
                    $dades[ $ord_donacio || '_data' ] = timestamp;
                    $dades[ $ord_donacio || '_qt' ] = $qt_args;
                    $dades[ $ord_donacio || '_factor_conversio' ] = $factor_conversio;
                    $dades[ 'total_donacions' ] = $total_donacions + $qt_args;
                    $args.qt = floor( $qt_args / $factor_conversio );
                    $args.rebedora = $adr__;
                    $args.sentit = 'ambdos';
                    $args.unitat_sortida = 'Estels';
                    $args.id_unitat_sortida = $id_estels;
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre || $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Calaix }",
                                        "amount": "{ $qt - $provisio_Registre }"
                                    },
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Procés' ] = $proces;
                            response[ 'Bytes donats' ] = $qt;
                            response[ 'Estels generats' ] = $args.qt;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'assignacio' }",
                    "init": "{
                    $ref_assignacio = 'assignacio_' || $args.requeriment;
                    $rebedora = $__dada( $idprop || '_rebedora' ) otherwise $args.rebedora;
                    $qt_assignacio = $__dada( $idprop || '_qt' ) otherwise $qt_args;
                    $requeriment =
                        $__dada( $idprop || '_requeriment' ) otherwise $args.requeriment;
                    if ( !! $__dada( $ref_assignacio ) )
                        bounce( 'Aquesta assignació ja ha estat realitzada' );
                    if ( $operacio == 'proposta' ) {
                        $dades[ $nova_idprop || '_rebedora' ] = $rebedora;
                        $dades[ $nova_idprop || '_requeriment' ] = $requeriment;
                        $dades[ $nova_idprop || '_qt' ] = $qt_args;
                        $dades[ $nova_idprop || '_unitat' ] = 'Estels';
                    }
                    if ( $operacio == 'confirmacio' OR $operacio == 'drecera' ) {
                        $ord_assignacio = 'assignacio_' || $ordinal_proces;
                        $total_assignacions = $__dada( 'total_assignacions' ) otherwise 0;
                        $dades[ $ref_assignacio ] = $ord_assignacio;
                        $dades[ $ord_assignacio || '_data' ] = timestamp;
                        $dades[ $ord_assignacio || '_unitat' ] = $id_estels;
                        $dades[ $ord_assignacio || '_rebedora' ] = $rebedora;
                        $dades[ $ord_assignacio || '_requeriment' ] = $requeriment;
                        $dades[ $ord_assignacio || '_qt' ] = $qt_assignacio;
                        $dades[ 'total_assignacions' ] = $total_assignacions + $qt_assignacio;
                        $args.qt = $qt_assignacio;
                        $args.rebedora = $rebedora;
                        $args.sentit = 'sortida';
                        $args.unitat_sortida = 'Estels';
                        $args.id_unitat_sortida = $id_estels;
                    }
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre || $args }"
                        },
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $operacio == 'confirmacio' OR $operacio == 'drecera' }",
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Calaix }",
                                        "amount": "{ $provisio_Calaix }"
                                    },
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                            response[ 'Proposta' ] =
                                $nova_idprop otherwise $ref otherwise 'drecera';
                            response[ 'Quantitat' ] = $qt_assignacio || ' ' || 'Estels';
                            response[ 'Rebedora' ] = $rebedora;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'traspas' }",
                    "init": "{
                    $_FRO = $__dada( '_FRO' );
                    $qt_traspas = $__dada( $idprop || '_qt' ) otherwise $qt_args;
                    $requeriment =
                        $__dada( $idprop || '_requeriment' ) otherwise $args.requeriment;
                    $ref_traspas = 'traspas_' || $requeriment;
                    if ( !! $__dada( $ref_traspas ) )
                        bounce( 'Aquest traspàs ja ha estat realitzat' );
                    if ( $operacio == 'proposta' ) {
                        $dades[ $nova_idprop || '_rebedora' ] = $_FRO;
                        $dades[ $nova_idprop || '_requeriment' ] = $requeriment;
                        $dades[ $nova_idprop || '_qt' ] = $qt_args;
                        $dades[ $nova_idprop || '_unitat' ] = 'Bytes';
                    }
                    if ( $operacio == 'confirmacio' OR $operacio == 'drecera' ) {
                        $ord_traspas = 'traspas_' || $ordinal_proces;
                        $total_traspassos = $__dada( 'total_traspassos' ) otherwise 0;
                        $dades[ $ref_traspas ] = $ord_traspas;
                        $dades[ $ord_traspas || '_data' ] = timestamp;
                        $dades[ $ord_traspas || '_unitat' ] = 'Bytes';
                        $dades[ $ord_traspas || '_rebedora' ] = $_FRO;
                        $dades[ $ord_traspas || '_requeriment' ] = $requeriment;
                        $dades[ $ord_traspas || '_qt' ] = $qt_traspas;
                        $dades[ 'total_traspassos' ] = $total_traspassos + $qt_traspas;
                        $args.qt = $qt_traspas;
                        $args.rebedora = $_FRO;
                        $args.sentit = 'sortida';
                        $args.unitat_sortida = 'Bytes';
                        $args.id_unitat_sortida = 'base';
                    }
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre || $args }"
                        },
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $operacio == 'confirmacio' OR $operacio == 'drecera' }",
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Calaix }",
                                        "amount": "{ $provisio_Calaix }"
                                    },
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                            response[ 'Proposta' ] =
                                $nova_idprop otherwise $ref otherwise 'drecera';
                            response[ 'Quantitat' ] = $args.qt;
                        }"
                        }
                    ]
                },
                {
                    "if": "{
                    contains(
                        'pronunciament, convocatoria, validacio_TEST',
                        $proces )
                }",
                    "init": "{
                    if ( $proces == 'pronunciament' ) $adr_aa = $_Pronunciaments;
                    if ( $proces == 'convocatoria' ) $adr_aa = $_Convocatories;
                    if ( $proces == 'validacio_TEST' ) 
                        $dades[ 'validacio_' || $idprop ] = timestamp;
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "if": "{ $proces != 'validacio_TEST' }",
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "if": "{ $proces != 'validacio_TEST' }",
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $adr_aa }",
                                        "amount": "{ $__provisio( $adr_aa ) }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $proces == 'convocatoria' }",
                            "app": "payment",
                            "payload": {
                                "asset": "{ $id_estels }",
                                "outputs": [
                                    {
                                        "address": "{ $_Convocatories }",
                                        "amount": "{ 20 }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $proces == 'validacio_TEST' AND $excepcio_provisional }",
                            "app": "data",
                            "payload": "{ $registre || $args }"
                        },
                        {
                            "if": "{ $proces == 'validacio_TEST' AND $excepcio_provisional }",
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'generacio' }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Implementacions }",
                                        "amount": "{ $provisio_Implementacions }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'configuracio' }",
                    "init": "{
                    $ord_configuracio = 'configuracio_' || $ordinal_proces;
                    $dades[ $ord_configuracio || '_data' ] = timestamp;
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre || $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio }"
                                    },
                                    {
                                        "address": "{ $_Implementacions }",
                                        "amount": "{ $provisio_Implementacions }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Procés' ] = $ord_configuracio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'inscripcio' }",
                    "init": "{
                    // Ha de constar com a pendent d'inscripció
                    if ( $estat_geto != 'pendent_inscripcio' )
                        bounce( "Aquest getó no consta com a pendent d'inscrpció" );
                    if ( $operacio == 'proposta' ) {
                        $dades[ $nova_idprop || '_estat' ] = 'operatiu';
                        $dades[ $nova_idprop || '_proposant' ] = $adr__;
                    }
                    if ( $operacio == 'confirmacio' OR $operacio == 'drecera' ) {
                        $dades[ $geto || '_estat' ] = 'operatiu';
                        $dades[ $geto || '_confirmant' ] = $adr__;
                        $dades[ $geto || '_proposant' ] =
                            $operacio == 'confirmacio' ?
                            $__dada( $idprop || '_proposant' ) :
                            $adr__;
                    }
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio }"
                                    },
                                    {
                                        "address": "{ $_Capsa }",
                                        "amount": "{ $__provisio( $_Capsa ) * 2 }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'nou_estat_geto' }",
                    "init": "{
                    // El getó ha d'existir
                    if ( ! $__dada( $geto || '_id' ) )
                        bounce( 'Getó inexistent' );
                    // No ha de constar com a pendent d'inscripció
                    if ( $estat_geto == 'pendent_inscripcio' )
                        bounce( "Aquest getó consta com a pendent d'inscrpció" );
                    //...
                    if ( $operacio == 'proposta' ) {
                        $dades[ $nova_idprop || '_geto' ] = $geto;
                        $dades[ $nova_idprop || '_estat' ] = $estat;
                    }
                    if ( $operacio == 'confirmacio' OR $operacio == 'drecera' ) {
                        $nou_estat = $__dada( $idprop || '_estat' ) otherwise $estat;
                        $dades[ $geto || '_estat' ] = $nou_estat;
                    }
                    $registre.dades = $dades;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $registre }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Nou estat' || $geto ] = $nou_estat otherwise $estat;
                            response[ 'Proposta' ] =
                                $nova_idprop otherwise $ref otherwise 'drecera';
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'emissio' }",
                    "init": "{
                    // S'hi han d'aportar Estels
                    if ( $unitat != $id_estels )
                        bounce( 'Cal aportar-hi Estels' );
                    // No es poden fer emissions d'Estels
                    if ( $geto == 'Estels' )
                        bounce( "No es poden fer emissions d'Estels" );
                    // El getó ha de constar com a operatiu
                    if ( $estat_geto != 'operatiu' )
                        bounce( "Aquest getó no consta com a operatiu" );
                    // La quantitat ha de ser superior a la mínima establerta
                    $minim = $__dada( 'Generacio_Minima' );
                    if ( $qt < $minim )
                        bounce( 'Cal aportar-hi si més no ' || $minim || ' Estels' );
                    $ordinal_emissio = $__dada( 'ordinal_emissio_' || $geto ) + 1;
                    $ref_emissio = 'emissio_' || $ordinal_emissio;
                    $factor_conversio = $__dada( $geto || '_factor_conversio' );
                    $total_emissio = $qt * $factor_conversio;
                    $total_convertits =
                        $__dada( 'total_estels_convertits_' || $geto ) otherwise 0;
                    $nou_total_convertits = $total_convertits + $qt;
                    $total_emesos =
                        $__dada( 'total_emesos_' || $geto ) otherwise 0;
                    $nou_total_emesos = $total_emesos + $total_emissio;
                    $dades[ $ref_emissio || '_data' ] = timestamp;
                    $dades[ $ref_emissio || '_geto' ] = $geto;
                    $dades[ $ref_emissio || '_estels' ] = $qt;
                    $dades[ $ref_emissio || '_emesos' ] = $total_emissio;
                    $dades[ $ref_emissio || '_emissora' ] = $adr__;
                    $dades[ 'total_estels_convertits_' || $geto ] = $nou_total_convertits;
                    $dades[ 'total_emesos_' || $geto ] = $nou_total_emesos;
                    $dades[ 'ordinal_emissio_' || $geto ] = $ordinal_emissio;
                    $registre.dades = $dades;
                    $args.idgeto = $__dada( $geto || '_id' );
                    $args.total_emissio = $total_emissio;
                    $args.sentit = 'entrada';
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args || $registre }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Capsa }",
                                        "amount": "{ $__provisio( $_Capsa ) }"
                                    },
                                    {
                                        "address": "{ $_Emissions }",
                                        "amount": "{ $__provisio( $_Emissions ) }"
                                    },
                                    {
                                        "address": "{ $_Registre }",
                                        "amount": "{ $provisio_Registre }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "{ $id_estels }",
                                "outputs": [
                                    {
                                        "address": "{ $_Calaix }",
                                        "amount": "{ $qt }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Getó' ] = $geto;
                            response[ 'Emissió' ] = $ordinal_emissio;
                            response[ 'Adreça emissora' ] = $adr__;
                            response[ 'FOP destinatari' ] = $_Capsa;
                            response[ 'Unitats del getó emeses' ] = $total_emissio;
                            response[ 'Factor de conversió' ] = $factor_conversio;
                            response[ 'Estels convertits' ] = $qt;
                            response[ "Total d'Estels convertits" ] = $total_convertits;
                            response[ 'Procés' ] = $proces;
                        }"
                        }
                    ]
                },
                {
                    "if": "{
                    contains(
                        'nou_definidor_geto, capacitacio, atribucio',
                        $proces )
                }",
                    "init": "{
                    // No aplicable als Estels
                    if ( $geto == 'Estels' )
                        bounce( "No viable amb Estels" );
                    if ( $estat_geto != 'operatiu' )
                        bounce( 'Getó no operatiu o desconegut' );
                    $args.provisio_Capsa = $__provisio( $_Capsa );
                    
                    $args.operacio = $operacio;
                    $args.nova_idprop = $nova_idprop;
                    $args.idprop = $idprop;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args || $dades }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Getons }",
                                        "amount": "{ $__provisio( $_Getons ) }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{
                    $args.admin_vincles
                    OR contains(
                        'nova_isox, nou_estat_isox, nova_delegacio, final_delegacio',
                        $proces )
                }",
                    "init": "{
                    if ( $autoritzacio_critica ) {
                        $args.operacio = $operacio;
                        $args.nova_idprop = $nova_idprop;
                        $args.idprop = $idprop;
                    }
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Vinculacions }",
                                        "amount": "{ $__provisio( $_Vinculacions ) }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{
                    contains(
                        'nou_avis, nou_avis_geto, nou_bloqueig, ' ||
                        'nou_bloqueig_geto, desbloqueig, desbloqueig_geto',
                        $proces )
                }",
                    "init": "{
                    $args.geto_unitat =
                        $unitat == $id_estels ?
                        'Estels':
                        $geto_unitat;
                    $args.operacio = $operacio;
                    $args.cicle_actual = $cicle_actual;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $_Avisos }",
                                        "amount": "{ $__provisio( $_Avisos ) }"
                                    }
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
]