Definition: [
    "autonomous agent",
    {
        "init": "{
        $nom_AA = 'Portal';
        $versio = '0.1.2';
        $_AUT_000 = 'XD7FVUM442NPIIMLRIT2FYWJEDQ4ILLJ';
       // Principals
        $adr__ = trigger.address;
        $args = trigger.data;
        $_unitat = trigger.output[[ asset != base ]].asset;
        $qt = trigger.output[[ asset = $_unitat ]];
        $definidors = var[ 'definidors' ] otherwise {};
        $ordinals = var[ 'ordinals' ] otherwise {};
        $refs_getons = var[ 'refs_getons' ] otherwise {};
        $ids_getons = var[ 'ids_getons' ] otherwise {};
        $versions = var[ 'versions' ] otherwise {};
        
        $qt_registre_DAG = 3000;
        $_estels = $definidors._Estels;
       // Abreviacions
        $admin = $args.admin;
        $proces = $args.proces;
        $ref = $args.ref;
        $idprop = $args.idprop;
       // Identificacions
        $_actuant_es_AUT_000 = $adr__ == $_AUT_000;
        $_actuant_es_AUT =
            ! $definidors
            OR ( $definidors._AUT_A AND $definidors._AUT_A == $adr__ )
            OR ( $definidors._AUT_B AND $definidors._AUT_B == $adr__ )
            OR ( $definidors._AUT_C AND $definidors._AUT_C == $adr__ )
            OR ( $definidors._AUT_0 AND $adr__ == $definidors._AUT_0 )
            OR ( $_actuant_es_AUT_000 AND ! is_valid_address( $definidors._AUT_0 ) );
       // Funcions auxiliars
        // Retorna valor argument lliurat si el troba. Altrament, s'atura
        $__arg = $arg =>
            $args[ $arg ] otherwise
            bounce( "Cal proporcionar el valor de: " || $arg );
        $__dada = $refval => {
            data_feed[[ oracles = $versions.Portal, feed_name = $refval, ifnone = false ]]
        };
        $__dada_Accions = $refval => {
            data_feed[[ oracles = $versions.Accions, feed_name = $refval, ifnone = false ]]
        };
        $__dada_AA = $refval, $vers => {
            data_feed[[ oracles = $vers, feed_name = $refval, ifnone = false ]]
        };
        $__ordinal = $rf => $ordinals[ $rf ] ? $ordinals[ $rf ] + 1 : 1;
       // Admin
        if ( $admin ) {
          // Autorització
            if ( $args.admin_geto ) {
                $ref_geto = $__arg( 'ref_geto' );
                // El getó ha de constar com a operatiu
                if ( ! $refs_getons[ $ref_geto ] )
                { bounce( 'Getó inexistent' ); }
                // Determina si adr__ actuant consta com autoritzada per al getó
                $_AUT_0 = $__dada( $ref_geto || '_AUT_0' );
                $_actuant_es_AUT_geto =
                    $_actuant_es_AUT AND ! $_AUT_0
                    OR $_actuant_es_AUT AND ! $proces == 'nou_geto'
                    OR $adr__ == $_AUT_0
                    OR $adr__ == $__dada( $ref_geto || '_AUT_A' )
                    OR $adr__ == $__dada( $ref_geto || '_AUT_B' )
                    OR $adr__ == $__dada( $ref_geto || '_AUT_C' );
                if ( ! $_actuant_es_AUT_geto )
                { bounce( 'No autoritzada per administrar el getó' ); }
            } else {
                if ( ! $_actuant_es_AUT )
                { bounce( 'No autoritzada' ); }
                // _AUT_000 pot saltar-se procés validació mentre no existeixi _AUT_0
                $_AUT_0_no_operatiu = ! $definidors._AUT_0 OR $definidors._AUT_0 == '...';
                $excepcio_inicial = $_actuant_es_AUT_000 AND $_AUT_0_no_operatiu;
                $validacio_requerida =
                    ! $excepcio_inicial
                    AND $proces != 'copia_dades_portal'
                    AND $proces != 'generacio_getons';
                if ( $validacio_requerida ) {
                    if ( $args.operacio AND $args.operacio == 'confirmacio' ) {
                        // La proposta ha d'existir
                        $temps_idprop = $__dada( $idprop );
                        if ( ! $temps_idprop )
                        { 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 pot fer quan ha transcorregut el lapse especificat
                        if ( $definidors.Lapse > timestamp - $temps_idprop )
                        { bounce( "Encara no es pot confirmar la proposta" ); }
                        // La proposta ha de constar com a validada
                        if ( ! $__dada_AA( 'validacio_' || $idprop, $versions.Validacions ) )
                        { bounce( "La proposta encara no ha estat validada" ); }
                        $operacio = 'confirmacio';
                    } else {
                        $nou_ordinal = $__ordinal( $proces );
                        $ordinals[ $proces ] = $nou_ordinal;
                        $nova_idprop = $proces || '_' || $nou_ordinal;
                        $operacio = 'proposta';
                    }
                } else { $operacio = 'drecera'; }
            }
        }
    }",
        "messages": {
            "cases": [
                {
                    "if": "{ $proces == 'acces_accions' }",
                    "init": "{
                    $unitat_es_geto = $ids_getons[ $_unitat ];
                    if ( $_unitat != $_estels
                        AND ( ! $unitat_es_geto OR $unitat_es_geto.estat != 'actiu' ) )
                    { bounce( 'Getó inexistent o inactiu' ); }
                    $ACC = $__arg( 'accio' );
                    $refgeto = $unitat_es_geto ? $refs_getons[ $_unitat ] : 'estels';
                    // Comprova si adreça activada per operar amb getó especificat
                    $__activada = ( $adrr, $reff ) => 
                        !! $__dada_Accions( 'activacio_' || $adrr || '_en_' || $reff ) ?
                        true :
                        bounce( 'Adreça no activada per a ' || $reff );
                    // Control adr__ activa
                    // Tret de l'activació per a Estels, per a la resta d'accions cal
                    // que l'adr__ actuant consti com a activada per operar amb Estels 
                    if ( $unitat_es_geto ) {
                        $__activada( $adr__, 'estels' );
                        if ( $ACC != 'Activacio' ) {
                            $__activada( $adr__, $refgeto );
                        }
                    }
                    else if ( $ACC != 'Activacio' ) {
                        $__activada( $adr__, 'estels' );
                    }
                    // Consulta si acció restringida
                    $__accRestringida = $acc => {
                        $refgeto == 'estels' ?
                        false :
                        $__dada_AA( $refgeto || '_' || $acc || 'ns_restringides', $versions.Getons )
                    };
                    // Si acció restringida per al getó especificat, comprova si adreça capacitada
                    $__capacitada = ( $acc, $adr ) => true;                   // Pendent revisió
                    /*
                    $__capacitada = ( $acc, $adr ) => {
                        $capacitacio = $__dada_geto( 'capacitacio_' || $refgeto || '_' || $acc || '_' || $adr );
                        $__accRestringida( $acc ) AND ! $capacitacio OR $capacitacio != 'capacitada' ?
                        bounce( 'Adreça no capacitada per a aquesta acció' ) :
                        true
                    };
                    */
                    // Les contribucions només es poden fer en Estels
                    if ( $ACC == 'Contribucio' AND $refgeto != 'estels' )
                    { bounce( 'Les contribucions només es poden fer en estels' ); }
                    if ( $ACC == 'Transfer' ) {
                        $receptora = $__arg( 'receptora' );
                        $receptora_activada =
                            $__activada( $receptora, 'estels' ) AND
                            $__activada( $receptora, $refgeto );
                        $receptora_capacitada =
                            $unitat_es_geto ?
                            $__capacitada( 'recepcio', $receptora ) :
                            true;
                        $ref_subscripcio = 'subscripcio_' || $receptora || '_en_' || $refgeto;
                        $receptora_subscrita = !! $__dada_Accions( $ref_subscripcio );
                        $ref_renovacio = 'renovacio_' || $receptora || '_en_' || $refgeto;
                        $cicle_renovacio = $__dada_Accions( $ref_renovacio || '_cicle' );
                        $cicle_actual = $__dada_Accions( 'cicle_actual' ) otherwise 1;
                        $receptora_renovada =
                            !! $cicle_renovacio AND
                            $cicle_renovacio == $cicle_actual;
                        if ( $receptora_subscrita AND $receptora_renovada ) {
                            $percent_derivacio =
                                $__dada_Accions( $ref_subscripcio || '_derivacio' );
                            $derivacio = floor( $qt * $percent_derivacio / 100 );
                            $total_particular =
                                $__dada( 'total_derivacions_' || $receptora || '_en_' || $refgeto ) + $derivacio;
                            $total_derivacions =
                                $__dada( 'total_derivacions_en_' || $refgeto ) + $derivacio;
                            $total_FOP =
                                $__dada( 'total_FOP_en_' || $refgeto ) + $derivacio;
                            $qt_accio = $qt - $derivacio;
                        } else {
                            $qt_accio = $qt;
                        }
                    } else {
                       $total_FOP = $__dada( 'total_FOP_en_' || $refgeto ) + $qt;
                       $qt_accio = $qt;
                    }
                    $total_unitat = $__dada( 'total_en_' || $refgeto ) + $qt;
                    $args.refgeto = $refgeto;
                    $args.qt_accio = $qt_accio;
                    $args.ordinal = $__ordinal( $ACC );
                    $ordinals[ $ACC ] = $args.ordinal;
                }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $definidors._Accions }",
                                        "amount": "{ $qt_registre_DAG }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $ACC == 'Transfer' }",
                            "app": "payment",
                            "payload": {
                                "asset": "{ $_unitat }",
                                "outputs": [
                                    {
                                        "address": "{ $receptora }",
                                        "amount": "{ $qt_accio }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $derivacio }",
                            "app": "data_feed",
                            "payload": {
                                "{ 'total_derivacions_' || $receptora || '_en_' || $refgeto }": "{ $total_particular }",
                                "{ 'total_derivacions_en_' || $refgeto }": "{ $total_derivacions }",
                                "{ 'total_FOP_en_' || $refgeto }": "{ $total_FOP }",
                                "{ 'total_en_' || $refgeto }": "{ $total_unitat }"
                            }
                        },
                        {
                            "if": "{ $ACC != 'Transfer' }",
                            "app": "data_feed",
                            "payload": {
                                "{ 'total_FOP_en_' || $refgeto }": "{ $total_FOP }",
                                "{ 'total_en_' || $refgeto }": "{ $total_unitat }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            if ( $receptora ) {
                                response[ 'Transfer a' ] =
                                    $receptora || " de " || $qt_accio || " " || $refgeto;
                            }
                            if ( $derivacio ) {
                                response[ 'Receptora deriva a FOP un ' || $percent_derivacio || '%' ] = $derivacio;
                                response[ 'Total Derivacions en ' || $refgeto ] = $total_derivacions;
                                response[ 'Total Derivacions de ' || $receptora || '_en_' || $refgeto ] = $total_particular;
                            }
                            if ( $receptora_subscrita AND ! $receptora_renovada ) {
                                response[ 'Atenció!' ] =
                                    "Adreça receptora subscrita però no renovada per al cicle actual: " ||
                                    " No comporta cap mena de derivació!";
                            }
                            var[ 'ordinals' ] = $ordinals;
                            response[ 'Procés' ] = $proces;
                      }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'inicialitzacio' }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $args._Inicialitzacio }",
                                        "amount": "{ $qt_registre_DAG }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                            var[ 'ordinals' ] = $ordinals;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'copia_dades_portal' }",
                    "messages": [
                        {
                            "app": "state",
                            "state": "{
                            $__copia_dades = $r => {
                                var[ $r ] = var[ $args.val ][ $r ] otherwise {}; };
                            $blocs_dades = [ 'definidors', 'ordinals', 'entitats',
                                'refs_getons', 'ids_getons', 'versions' ];
                            $m = map( $blocs_dades, 6, $__copia_dades );
                            response[ 'Procés' ] = $proces;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'esmena_definidor' }",
                    "messages": [
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "data_feed",
                            "payload": {
                                "{ $nova_idprop }": "{ timestamp }",
                                "{ $nova_idprop || '_ref' }": "{ $ref }",
                                "{ $nova_idprop || '_val' }": "{ $args.val }",
                                "{ $nova_idprop || '_proposant' }": "{ $adr__ }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            if ( $operacio != 'proposta' ) {
                                $nova_ref = $__dada( $idprop || '_ref' ) otherwise $ref;
                                $nou_val = $__dada( $idprop || '_val' ) otherwise $args.val;
                                $definidors[ $nova_ref ] = $nou_val;
                                $nom_aa = substring( $nova_ref, 1 );
                                $AAs = 'Accions, Getons, Validacions, Validadores';
                                if( contains( $AAs, $nom_aa ) ) {
                                    $versions[ $nom_aa ] = $nou_val || ':' || $versions[ $nom_aa ];
                                    var[ 'versions' ] = $versions;
                                    response[ 'Versions ' || $nom_aa ] = $versions[ $nom_aa ];
                                }
                            }
                            response[ 'Nova ref' ] = $nova_ref;
                            response[ 'Nou valor' ] = $nou_val;
                            response[ 'Proposta' ] = $idprop;
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                            var[ 'definidors' ] = $definidors;
                            var[ 'ordinals' ] = $ordinals;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'esmena_versions' }",
                    "messages": [
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "data_feed",
                            "payload": {
                                "{ $nova_idprop }": "{ timestamp }",
                                "{ $nova_idprop || '_nom_aa' }": "{ $args.nom }",
                                "{ $nova_idprop || '_nou_valor' }": "{ $args.val }",
                                "{ $nova_idprop || '_proposant' }": "{ $adr__ }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            if ( $operacio != 'proposta' ) {
                                $nom_aa = $__dada( $idprop || '_nom_aa' ) otherwise $args.nom;
                                $nou_valor = $__dada( $idprop || '_nou_valor' ) otherwise $args.val;
                                $afegiment = $nou_valor ? ( ':' || $nou_valor ) : '';
                                $versions[ $nom_aa ] = $definidors[ '_' || $args.nom ] || $afegiment;
                                var[ 'versions' ] = $versions;
                                response[ 'Versions ' || $nom_aa ] = $versions[ $nom_aa ];
                            }
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                            var[ 'ordinals' ] = $ordinals;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'assignacio' }",
                    "init": "{
                    $unitat = $__dada( $idprop || '_unitat' ) otherwise $args.unitat;
                    $qt_assignacio = $__dada( $idprop || '_qt' ) otherwise $args.qt;
                    $receptora = $__dada( $idprop || '_receptora' ) otherwise $args.receptora;
                }",
                    "messages": [
                        {
                            "if": "{ $operacio != 'proposta' }",
                            "app": "payment",
                            "payload": {
                                "asset": "{ $unitat }",
                                "outputs": [
                                    {
                                        "address": "{ $receptora }",
                                        "amount": "{ $args.qt }"
                                    }
                                ]
                            }
                        },
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "data_feed",
                            "payload": {
                                "{ 'proposta_' || $nova_idprop }": "{ timestamp }"
                            }
                        },
                        {
                            "if": "{ $operacio != 'confirmacio' }",
                            "app": "data_feed",
                            "payload": {
                                "{ $nova_idprop }": "{ timestamp }",
                                "{ $nova_idprop || '_ref' }": "{ $ref }",
                                "{ $nova_idprop || '_val' }": "{ $args.val }",
                                "{ $nova_idprop || '_proposant' }": "{ $adr__ }",
                                "{ $nova_idprop || '_receptora' }": "{ $receptora }",
                                "{ $nova_idprop || '_resolucio' }": "{ $args.resolucio }",
                                "{ $nova_idprop || '_requeriment' }": "{ $args.requeriment }",
                                "{ $nova_idprop || '_qt' }": "{ $qt }",
                                "{ $nova_idprop || '_unitat' }": "{ $unitat }"
                            }
                        },
                        {
                            "if": "{ $operacio == 'confirmacio' OR $operacio == 'drecera' }",
                            "app": "data_feed",
                            "payload": {
                                "{ 'confirmacio_' || $nova_idprop }": "{ timestamp }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Proposta' ] = $nova_idprop;
                            response[ 'Quantitat' ] = $qt_assignacio;
                            response[ 'Receptora' ] = $receptora;
                            response[ 'Unitat' ] = $unitat;
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                            var[ 'ordinals' ] = $ordinals;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'conversio' }",
                    "init": "{
                    $qt_conversio = $__dada_Accions( $__arg( 'ref' ) || '_qt_conversio' );
                    if ( ! $qt_conversio )
                    { bounce( 'Dipòsit inexistent' ); }
                    if ( $adr__ != $__dada_Accions( $ref || '_dipositant' ) )
                    { bounce( "L'adreça receptora ha de ser la dipositant" ); }
                    if ( !! $__dada( 'conversio_' || $ref ) )
                    { bounce( 'Aquest dipòsit ja ha estat convertit' ); }
                    $cicle_conversio = $__dada_Accions( $ref || '_cicle_conversio' );
                    if ( $cicle_conversio > $__dada_Accions( 'cicle_actual' ) )
                    { bounce( "Encara no és l'hora" ); }
                    $unitat =
                        $__dada_Accions( $ref || '_geto_diposit' ) == $_estels ?
                        "base" :
                        $_estels;
                }",
                    "messages": [
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "{ $unitat }",
                                "outputs": [
                                    {
                                        "address": "{ $adr__ }",
                                        "amount": "{ $qt_conversio }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "data_feed",
                            "payload": {
                                "{ 'conversio_' || $ref }": "{ timestamp }",
                                "{ 'conversio_' || $ref || '_qt' }": "{ $qt }",
                                "{ 'conversio_' || $ref || '_unitat' }": "{ $unitat }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Conversió realitzada' ] = $ref;
                            response[ 'Procés' ] = $proces;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'retribucio' }",
                    "init": "{
                    if ( $ref == 'aportacio_activacio' ) {
                        $import = $__dada_Accions( 'activacio_' || $adr__ || '_en_estels_qt' );
                        $escala = $__dada_Accions( 'activacio_' || $adr__ || '_en_estels_escala' );
                        if ( ! $import )
                        { bounce( 'Activació inexistent' ); }
                    } else {
                        $import = $__dada_Accions( $ref );
                        $escala = $__dada_Accions( $ref || '_escala' );
                        if ( ! $import )
                        { bounce( 'Contribució inexistent' ); }
                        if ( $adr__ != $__dada_Accions( $ref || '_contribuidora' ) )
                        { bounce( "Només l'adreça contribuïdora pot rebre la retribució" ); }
                    }
                    $escala_actual = $__dada_Accions( 'escala_actual' ) otherwise 1;
                    $ref_retribucio = $__dada( 'retribucio_' || $ref || '_' || $escala_actual );
                    if ( !! $ref_retribucio )
                    { bounce( "Ja ha estat retribuïda per a l'escala actual" ); }
                    // Cal que s'hagi produït un salt d'escala
                    if ( $escala_actual == $escala ) { bounce ( "Cal que es produeixi un salt d'escala" ); }
                    // Cal que hagi passat igual o més temps entre la data del salt d'escala i la de la 
                    //retribució que entre la data del salt d'escala anterior i la de la contribució
                    $interval_actual = timestamp - $__dada_Accions( 'data_escala_' || $escala_actual );
                    $interval_contribucio = $__dada_Accions( $ref || '_interval' );
                    if ( $interval_actual < $interval_contribucio ) { bounce ( "Encara no és l'hora" ); }
                    // Determina la qt de la retribucio
                    $qt_retribucio = $import * ( $escala_actual - $escala );
                }",
                    "messages": [
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "{ $_estels }",
                                "outputs": [
                                    {
                                        "address": "{ $adr__ }",
                                        "amount": "{ $qt_retribucio }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "data_feed",
                            "payload": {
                                "{ 'retribucio_' || $ref }": "{ timestamp }",
                                "{ 'retribucio_' || $ref || '_qt' }": "{ $qt_retribucio }",
                                "{ 'retribucio_' || $ref || '_receptora' }": "{ $adr__ }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            response[ 'Retribució realitzada' ] = $ref_retribucio;
                            response[ 'Procés' ] = $proces;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'convocatoria_validadores' }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $definidors._Validacions }",
                                        "amount": "{ $qt_registre_DAG }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'decisio_validacio' }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $definidors._Validacions }",
                                        "amount": "{ $qt_registre_DAG }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{ $proces == 'validacio_directa_TEST' AND $_actuant_es_AUT }",
                    "messages": [
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $definidors._Validacions }",
                                        "amount": "{ $qt_registre_DAG }"
                                    }
                                ]
                            }
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $args.admin_entitats }",
                    "messages": [
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "data_feed",
                            "payload": {
                                "{ $nova_idprop }": "{ timestamp }",
                                "{ $nova_idprop || '_adr' }": "{ $args.adr }",
                                "{ $nova_idprop || '_nom' }": "{ $args.nom }",
                                "{ $nova_idprop || '_estat' }": "{ $args.estat }"
                            }
                        },
                        {
                            "app": "state",
                            "state": "{
                            $entitats = var[ 'entitats' ] otherwise {};
                            $estat_prop = $__dada( $idprop || '_estat' );
                            if ( $proces == 'nova_entitat' ) {
                                if ( $entitats[ $args.adr ] )
                                { bounce( "Ja hi ha una entitat amb aquesta adreça" ); }
                                if ( $entitats[ $args.adr ].nom == $args.nom )
                                { bounce( "Ja hi ha una entitat amb aquest nom" ); }
                                if ( $operacio != 'proposta' ) {
                                    $adr_entitat = $args.adr otherwise $__dada( $idprop || '_adr' );
                                    $entitats[ $adr_entitat ] = {
                                        nom: $args.nom otherwise $__dada( $idprop || '_nom' ),
                                        estat: $args.estat otherwise $estat_prop,
                                    };
                                }
                            }
                            if ( $proces == 'nou_estat_entitat' ) {
                                if ( ! $entitats[ $args.adr ] )
                                { bounce( "No hi ha cap entitat amb aquesta adreça" ); }
                                if ( $operacio != 'proposta' ) {
                                    $entitats[ $args.adr ].estat =
                                        $args.estat otherwise $estat_prop;
                                }
                            }
                            var[ 'entitats' ] = $entitats;
                            var[ 'ordinals' ] = $ordinals;
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'implementacio_geto' }",
                    "init": "{
                    $reff_geto = $__arg( 'ref_geto' );
                    // La proposta del nou getó ha d'estar confirmada
                    if ( $__dada_AA( $reff_geto || '_confirmant', $versions.Getons ) )
                    { bounce( 'Proposta pendent de confirmació' ); }
                }",
                    "messages": [
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "data_feed",
                            "payload": {
                                "{ $nova_idprop }": "{ timestamp }",
                                "{ $nova_idprop || '_ref' }": "{ $reff_geto }"
                            }
                        },
                        {
                            "if": "{ $operacio != 'proposta' }",
                            "app": "asset",
                            "payload": {
                                "cap": "{ $args.cap otherwise 1e9 }",
                                "is_private": false,
                                "is_transferrable": true,
                                "auto_destroy": "{ !! $args.auto_destroy }",
                                "fixed_denominations": false,
                                "issued_by_definer_only": true,
                                "cosigned_by_definer": false,
                                "spender_attested": false
                            }
                        },
                        {
                            "if": "{ $operacio != 'proposta' }",
                            "app": "state",
                            "state": "{
                            $refs_getons[ response_unit ] = $reff_geto;
                            $ids_getons[ $reff_geto ] = response_unit;
                            var[ 'ids_getons' ] = $ids_getons;
                            var[ 'refs_getons' ] = $refs_getons;
                            var[ 'ordinals' ] = $ordinals;
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $admin AND $proces == 'baixa_geto' }",
                    "init": "{
                    $reff_geto = $__arg( 'ref_geto' );
                    // El getó ha d'existir
                    if ( ! $refs_getons[ $reff_geto ] )
                    { bounce( 'Getó inexistent' ); }
                }",
                    "messages": [
                        {
                            "if": "{ $operacio == 'proposta' }",
                            "app": "data_feed",
                            "payload": {
                                "{ $nova_idprop }": "{ timestamp }",
                                "{ $nova_idprop || '_geto' }": "{ $reff_geto }"
                            }
                        },
                        {
                            "if": "{ $operacio != 'proposta' }",
                            "app": "state",
                            "state": "{
                            delete( $ids_getons, $reff_geto );
                            delete( $refs_getons, $refs_getons[ $reff_geto ] );
                            var[ 'refs_getons' ] = $refs_getons;
                            var[ 'ids_getons' ] = $ids_getons;
                            var[ 'ordinals' ] = $ordinals;
                            response[ 'Procés' ] = $proces;
                            response[ 'Operació' ] = $operacio;
                        }"
                        }
                    ]
                },
                {
                    "if": "{ $args.admin_geto }",
                    "init": "{
                    $args.operacio = $operacio;
                    $args.idprop = $nova_idprop;
                    $args.nougeto = $proces == 'nou_geto' ? 'geto_' || $__ordinal( 'geto' ) : '';
                }",
                    "messages": [
                        {
                            "if": "{ $proces == 'emissio_getons' }",
                            "init": "{
                            if ( $_unitat != $_estels )
                            { bounce( 'Cal aportar-hi estels' ); }
                            if ( $qt < $definidors.Generacio_Minima )
                            { bounce( 'Cal aportar-hi si més no '
                            || $definidors.Generacio_Minima || ' estels' ); }
                        }",
                            "app": "payment",
                            "payload": {
                                "asset": "{ $ids_getons[ $ref_geto ] }",
                                "outputs": [
                                    {
                                        "address": "{ $__dada_AA( $ref_geto || '_FOP', $versions.Getons ) }",
                                        "amount": "{ $qt * $__dada_AA( $ref_geto || 'factor_conversio', $versions.Getons ) }"
                                    }
                                ]
                            }
                        },
                        {
                            "app": "data",
                            "payload": "{ $args }"
                        },
                        {
                            "app": "payment",
                            "payload": {
                                "asset": "base",
                                "outputs": [
                                    {
                                        "address": "{ $definidors._Getons }",
                                        "amount": "{ $qt_registre_DAG }"
                                    }
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
]