Definition: [
"autonomous agent",
{
"init": "{\r
$nom_AA = 'Accions';\r
$darrera_versio = '0000000000';\r
//$_Portal_original = '0000000000';\r
$_Portal_original = trigger.address; //Hauria de ser fix amb adr darrer Portal \r
\r
$_Portal_actual = var[ 'nou_portal' ] otherwise $_Portal_original;\r
\r
if ( $_Portal_actual != trigger.address )\r
{\r
$_Portal = substring( var[ $_Portal_actual ][ 'versions' ], 0, 32 );\r
if ( $_Portal != trigger.address )\r
{ bounce ( 'Portal no reconegut' ); }\r
} else {\r
$_Portal = $_Portal_actual;\r
}\r
\r
\r
// Principals\r
$args = trigger.data;\r
$adr__ = trigger.initial_address;\r
$idgeto = trigger.output[[ asset != base ]].asset;\r
\r
$generics = var[ $_Portal ][ 'generics' ];\r
\r
$versions_portal = var[ $_Portal ][ 'versions' ];\r
$versions = var[ $_Portal ][ 'versions_accions' ] otherwise this_address;\r
$versions_getons =\r
var[ $_Portal ][ 'versions_getons' ] otherwise $generics._Getons;\r
\r
$refs_getons = var[ $_Portal ][ 'refs_getons' ];\r
$refgeto = $args.refgeto otherwise \r
bounce( 'refgeto? ' || $args.refgeto || ' qt_accio ' || $args.qt_accio );\r
\r
$dades = var[ 'dades' ] otherwise {};\r
$ordinals = $dades.ordinals otherwise {};\r
$cicle_actual = $dades.cicle_actual;\r
\r
\r
// Funcions\r
$__ordinal = $rf => $ordinals[ $rf ] ? $ordinals[ $rf ] + 1 : 1;\r
\r
// Si no s'ha lliurat l'argument especificat bota l'accés\r
$__arg = $arg =>\r
$args[ $arg ] otherwise \r
bounce( "Cal proporcionar el valor de: " || $arg );\r
\r
$__dada = $refval => {\r
//data_feed[[ oracles = $versions, feed_name = $refval, ifnone = false ]]\r
bounce( 'versions ' || $versions || ' refval ' || $refval )\r
};\r
\r
$__dada_geto = $refval => {\r
data_feed[[ oracles = $versions_getons, feed_name = $refval, ifnone = false ]]\r
};\r
\r
$__dada_portal = $refval => {\r
data_feed[[ oracles = $versions_portal, feed_name = $refval, ifnone = false ]]\r
};\r
\r
$__param = $refparam => {\r
$refgeto == 'estels'?\r
$generics[ $refparam ] :\r
$__dada_geto( $refgeto || '_' || $refparam )\r
};\r
\r
// Consulta si acció restringida\r
$__accRestringida = $acc => {\r
$refgeto == 'estels' ?\r
false :\r
$__dada_geto( $refgeto || '_' || $acc || 'ns_restringides' )\r
};\r
\r
// Si acció restringida per al getó especificat, comprova si adreça capacitada\r
$__capacitada = ( $acc, $adr ) => true; // Pendent revisió\r
\r
/*\r
$__capacitada = ( $acc, $adr ) => {\r
$capacitacio = $__dada_geto( 'capacitacio_' || $refgeto || '_' || $acc || '_' || $adr );\r
$__accRestringida( $acc ) AND ! $capacitacio OR $capacitacio != 'capacitada' ?\r
bounce( 'Adreça no capacitada per a aquesta acció' ) :\r
true\r
};\r
*/\r
\r
\r
// Comprova si adreça activada per operar amb getó especificat\r
$__activada = ( $adr, $ref ) => {\r
$__dada( 'activacio_' || $adr__ || '_en_' || $ref ) ?\r
true :\r
bounce( 'Adreça no activada per a ' || $ref )\r
};\r
\r
// Comprova si qt proporcionada cobreix import especificat\r
$__qtSuficient = $ref, $q =>\r
$__param( $ref ) > $q ?\r
bounce( "L'" || $ref || " és de " || $__param( $ref ) ) :\r
true;\r
\r
// Comprova si adreça consta com a subscrita\r
$__subscrita = $adr => {\r
$__dada( 'subscripcio_' || $adr__ || '_en_' || $refgeto ) ?\r
true :\r
bounce( "Adreça no subscrita per a " || $refgeto ) };\r
\r
// Comprova si la subscripció ha estat renovada per al cicle actual\r
$__renovada = $adr => {\r
$cicle_renovat = $__dada( 'renovacio_' || $adr__ || '_en_' || $refgeto || '_cicle' );\r
! $cicle_renovat OR $cicle_actual > $cicle_renovat ?\r
bounce( "Subscripció de l'adreça no renovada per a " || $refgeto )\r
: $__subscrita( $adr ) };\r
\r
\r
// Principals\r
$ACC = $__arg( 'accio' );\r
$qt = $__arg( 'qt_accio' );\r
\r
// Avisos\r
// Consulta si hi ha cap avís per a adr__\r
$ref_avis = $refgeto || '_avis_' || $adr__;\r
$rebot = $__dada_geto( $ref_avis || '_rebot' );\r
$temps_avis = $__dada_geto( $ref_avis );\r
$avis_es_actual =\r
$temps_avis AND\r
$temps_avis + ( $generics.Lapse * 2 ) < timestamp;\r
if ( $avis_es_actual AND $rebot )\r
{ bounce ( $__dada_geto( $ref_avis ) ); }\r
\r
\r
// Accions\r
// Control adr__ activa\r
// Tret de l'activació per a Estels, per a la resta d'accions cal\r
// que l'adr__ actuant consti com a activada per operar amb Estels \r
if ( $refgeto != 'estels' ) {\r
$__activada( $adr__, 'estels' );\r
if ( $ACC != 'Activacio' )\r
{ $__activada( $adr__, $refgeto ); }\r
}\r
else if ( $ACC != 'Activacio' )\r
{ $__activada( $adr__, 'estels' ); }\r
\r
\r
// Transfer\r
if ( $ACC == 'Transfer' ) {\r
$receptora = $__arg( 'receptora' );\r
$condicions =\r
$__activada( $receptora, 'estels' )\r
AND $__activada( $receptora, $refgeto )\r
AND $refgeto == 'estels' ? true : $__capacitada( 'recepcio', $receptora )\r
AND $__subscrita( $adr__ ) ? $__renovada( $receptora ) : true;\r
}\r
\r
\r
// Gestió Cicles\r
if ( ! $cicle_actual ) {\r
$nou_cicle = 1;\r
$nova_data = timestamp;\r
$nova_data_cicle_anterior = 0;\r
$interval = 0;\r
$nova_escala = 1;\r
} else {\r
$data_cicle_actual = $dades.data_cicle_actual;\r
$data_cicle_anterior = $dades.data_cicle_anterior;\r
$interval = timestamp - $data_cicle_actual;\r
if ( $generics.Interval < $interval ) {\r
$nou_cicle = $cicle_actual + 1;\r
$nova_data = timestamp;\r
$nova_data_cicle_anterior = $data_cicle_actual;\r
$total_FOP = $__dada_portal( 'total_FOP_en_estels' );\r
$nova_escala = $total_FOP ? length( $total_FOP ) : 1;\r
} else {\r
$nou_cicle = $cicle_actual;\r
$nova_data = $data_cicle_actual;\r
$nova_data_cicle_anterior = $data_cicle_anterior;\r
$nova_escala = $dades.escala_actual;\r
}\r
}\r
\r
$dades.cicle_actual = $nou_cicle;\r
$dades.data_cicle_actual = $nova_data;\r
$dades.data_cicle_anterior = $nova_data_cicle_anterior;\r
$dades.escala_actual = $nova_escala;\r
\r
\r
// Activacio\r
if ( $ACC == 'Activacio' ) {\r
\r
if ( $__dada( 'activacio_' || $adr__ || '_en_' || $refgeto ) )\r
{ bounce( 'Adreça ja activada' ); }\r
\r
$condicions =\r
$__capacitada( 'activacio', $adr__ )\r
AND $__qtSuficient( 'Import_Activacio', $qt )\r
AND $__arg( 'nom' );\r
}\r
\r
\r
// Subscripcio\r
if ( $ACC == 'Subscripcio' ) {\r
\r
if ( $__dada( 'subscripcio_' || $adr__ || '_en_' || $refgeto ) )\r
{ bounce( 'Adreça ja subscrita' ); }\r
\r
$condicions =\r
$__capacitada( 'subscripcio', $adr__ )\r
AND $__qtSuficient( 'Import_Subscripcio', $qt )\r
AND $__arg( 'nom' )\r
AND $__arg( 'derivacio' );\r
}\r
\r
\r
// Renovacio\r
if ( $ACC == 'Renovacio' ) {\r
$condicions =\r
$__subscrita( $adr__ )\r
AND $__qtSuficient( 'Import_Renovacio', $qt );\r
\r
$cicle_renovat = $__dada( 'renovacio_' || $adr__ || '_en_' || $refgeto || '_cicle' );\r
if ( $nou_cicle > 1\r
AND $cicle_renovat\r
AND $nou_cicle == $cicle_renovat )\r
{ bounce( 'Cicle ja renovat' ); }\r
}\r
\r
\r
// Diposit\r
if ( $ACC == 'Diposit' ) {\r
$condicions =\r
$__capacitada( 'conversio', $adr__ )\r
AND $__renovada( $adr__ );\r
\r
$taxa_conversio = $__param( 'Taxa_Conversio' );\r
$cicles_diposit = $__param( 'Cicles_Diposit' );\r
$cicle_conversio = $nou_cicle + $cicles_diposit;\r
$taxa = round( $qt * $taxa_conversio / 100, 0 );\r
$qt_conversio = $qt - $taxa;\r
}\r
\r
\r
// Contribucio\r
if ( $ACC == 'Contribucio' )\r
{\r
// Ha de ser exclusivament en Estels\r
$__arg( 'ref' ); \r
}\r
\r
\r
// Ordinal\r
$ordinal = $__ordinal( $ACC );\r
\r
\r
// Total acumulat\r
$ref_total = $ACC == 'Diposit' ? 'diposits' : to_lower( $ACC ) || 'ns';\r
$total_acc = $__dada( 'total_' || $ref_total || '_en_' || $refgeto ) otherwise 0;\r
\r
}",
"messages": [
{
"if": "{ $ACC == 'Activacio' }",
"app": "data_feed",
"payload": {
"{ $ref_total }": "{ $total_acc + $qt }",
"{ 'activacio_' || $adr__ || '_en_' || $refgeto }": "{ timestamp }",
"{ 'activacio_' || $adr__ || '_en_' || $refgeto || '_nom' }": "{ $args.nom }",
"{ 'activacio_' || $adr__ || '_en_' || $refgeto || '_qt' }": "{ $qt }",
"{ 'activacio_' || $adr__ || '_en_' || $refgeto || '_cicle' }": "{ $nou_cicle }",
"{ 'activacio_' || $adr__ || '_en_' || $refgeto || '_ordinal' }": "{ $ordinal }",
"{ 'activacio_' || $adr__ || '_en_' || $refgeto || '_escala' }": "{ $refgeto == 'estels' ? $nova_escala : 100 }"
}
},
{
"if": "{ $ACC == 'Subscripcio' }",
"app": "data_feed",
"payload": {
"{ $ref_total }": "{ $total_acc + $qt }",
"{ 'subscripcio_' || $adr__ || '_en_' || $refgeto }": "{ timestamp }",
"{ 'subscripcio_' || $adr__ || '_en_' || $refgeto || '_nom' }": "{ $args.nom }",
"{ 'subscripcio_' || $adr__ || '_en_' || $refgeto || '_cicle' }": "{ $nou_cicle }",
"{ 'subscripcio_' || $adr__ || '_en_' || $refgeto || '_ordinal' }": "{ $ordinal }",
"{ 'subscripcio_' || $adr__ || '_en_' || $refgeto || '_derivacio' }": "{ $args.derivacio }"
}
},
{
"if": "{ $ACC == 'Renovacio' }",
"app": "data_feed",
"payload": {
"{ $ref_total }": "{ $total_acc + $qt }",
"{ 'renovacio_' || $adr__ || '_en_' || $refgeto }": "{ timestamp }",
"{ 'renovacio_' || $adr__ || '_en_' || $refgeto || '_cicle' }": "{ $nou_cicle }"
}
},
{
"if": "{ $ACC == 'Diposit' }",
"app": "data_feed",
"payload": {
"{ $ref_total }": "{ $total_acc + $qt }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto }": "{ timestamp }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_dipositant' }": "{ $adr__ }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_qt_diposit' }": "{ $qt }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_qt_conversio' }": "{ $qt_conversio }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_cicle_conversio' }": "{ $taxa_conversio }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_taxa' }": "{ $taxa_conversio }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_cicle' }": "{ $nou_cicle }",
"{ 'diposit_' || $ordinal || '_en_' || $refgeto || '_geto_diposit' }": "{ $refgeto }"
}
},
{
"if": "{ $ACC == 'Contribucio' }",
"app": "data_feed",
"payload": {
"{ $ref_total }": "{ $total_acc + $qt }",
"{ 'contribucio_' || $ordinal }": "{ timestamp }",
"{ 'contribucio_' || $ordinal || '_contribuidora' }": "{ $adr__ }",
"{ 'contribucio_' || $ordinal || '_qt' }": "{ $qt }",
"{ 'contribucio_' || $ordinal || '_cicle' }": "{ $nou_cicle }",
"{ 'contribucio_' || $ordinal || '_escala' }": "{ $nova_escala }"
}
},
{
"app": "state",
"state": "{\r
\r
if ( $ref_avis AND $avis_es_actual )\r
{ response[ 'AVÍS: ' ] = $__dada_geto( $ref_avis || '_text' ); }\r
\r
response[ 'cicle actual' ] = $nou_cicle;\r
response[ 'data cicle actual' ] = timestamp_to_string( $nova_data );\r
response[ 'data cicle anterior' ] = timestamp_to_string( $nova_data_cicle_anterior );\r
response[ 'escala actual' ] = $nova_escala;\r
response[ 'interval' ] = $interval;\r
\r
// Activacions\r
if ( $ACC == 'Activacio' ) {\r
response[ 'Resultat: ' ] =\r
"Activació #" || $ordinal || " amb nom: " || $args.nom\r
|| " de l'adr " || $adr__ || " per operar amb " || $refgeto;\r
}\r
\r
// Subscripcions\r
if ( $ACC == 'Subscripcio' ) {\r
response[ 'Resultat: ' ] =\r
"Subscripció #" || $ordinal || " amb nom: " \r
|| $args.nom || " de l'adr " || $adr__ || " per al cicle "\r
|| $nou_cicle || 'per operar amb ' || $refgeto;\r
}\r
\r
// Renovacions\r
if ( $ACC == 'Renovacio' ) {\r
response[ 'Resultat: ' ] =\r
"Renovació de la subscripció per al cicle " || $nou_cicle\r
|| " de l'adr " || $adr__ || ' en ' || $refgeto;\r
}\r
\r
// Dipòsits\r
if ( $ACC == 'Diposit' ) {\r
response[ 'Ref dipòsit' ] = 'diposit_' || $ordinal || '_en_' || $refgeto;\r
response[ 'Dipositant' ] = $adr__;\r
response[ 'Qt dipòsit' ] = $qt;\r
response[ 'Qt conversió' ] = $qt_conversio;\r
response[ 'Taxa' ] = $taxa_conversio;\r
response[ 'Data dipòsit' ] = timestamp_to_string( timestamp );\r
response[ 'Cicle dipòsit' ] = $nou_cicle;\r
response[ 'Cicle conversió' ] = $nou_cicle + $cicle_conversio;\r
}\r
\r
// Contribucions\r
if ( $ACC == 'Contribucio' ) {\r
response[ 'Ref contribucio' ] = 'contribucio_' || $ordinal;\r
response[ 'Contribuidora' ] = $adr__;\r
response[ 'Qt' ] = $qt;\r
response[ 'Escala actual' ] = $nova_escala;\r
}\r
\r
// -- Nou Portal\r
if ( $_Portal != $_Portal_actual ) {\r
var[ 'anterior_portal' ] = var[ 'nou_portal' ];\r
var[ 'nou_portal' ] = $_Portal;\r
response[ 'Nou portal'] = $_Portal;\r
}\r
\r
// -- Actualització dades\r
if ( $args.copia_dades ) {\r
var[ 'dades' ] = var[ $darrera_versio ][ 'dades' ];\r
} else {\r
var[ 'dades' ] = $dades;\r
}\r
\r
response[ 'acció realitzada' ] = $ACC;\r
response[ 'cicle actual' ] = $nou_cicle;\r
}"
}
]
}
]