[
"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 = var[ 'nou_portal' ] otherwise $_Portal_original;\r
\r
if ( $_Portal != trigger.address )\r
{ bounce ( 'Portal no habilitat' ); }\r
\r
// Principals\r
$args = trigger.data;\r
$adr__ = trigger.initial_address;\r
$idgeto = trigger.output[[ asset != base ]].asset;\r
$qt = trigger.output[[ asset = $idgeto ]];\r
\r
$dades_portal = var[ $_Portal ][ 'dades' ];\r
$generics = $dades_portal.generics;\r
$_estels = $generics._estels;\r
//$_FOP = $generics._FOP;\r
$_FOP = $_Portal;\r
$getons = var[ $generics._Getons ][ 'Getons' ];\r
$geto = $getons[ $idgeto ];\r
$es_en_getons = $idgeto != $_estels;\r
\r
$dades = var[ 'Dades' ] otherwise {};\r
$basiques = $dades.basiques;\r
$totals = $dades.totals;\r
$ordinals = $dades.ordinals otherwise {};\r
$cicle_actual = $basiques.cicle_actual;\r
\r
$params = $es_en_getons ? $geto.variables : $generics;\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
// Consulta si acció restringida\r
$__accRestringida = $acc => {\r
$es_en_getons ?\r
$geto.capacitacions [ $acc || 'ns_restringides' ] :\r
false\r
};\r
\r
// Si acció restringida per al getó especificat, comprova si adreça capacitada\r
$__capacitada = ( $acc, $adr ) => {\r
$__accRestringida( $acc ) \r
AND $geto.capacitacions[ $acc ][ $adr ].estat != 'capacitada' ?\r
bounce( 'Adreça no capacitada per a aquesta acció' ) :\r
true\r
};\r
\r
// Comprova si adreça activada per operar amb getó especificat\r
$__activada = ( $adr, $id_geto ) => {\r
var[ 'activacio_' || $adr || '_en_' || $id_geto ] ?\r
true :\r
bounce( ': Adreça no activada per a ' || $id_geto )\r
};\r
\r
// Comprova si qt proporcionada cobreix import especificat\r
$__qtSuficient = $ref =>\r
$params[ $ref ] > $qt ?\r
bounce( ": L'" || $ref || " és de " || $params[ $ref ] ) :\r
true;\r
\r
// Comprova si adreça consta com a subscrita\r
$__subscrita = $adr => {\r
$subscripcio = var[ 'subscripcio_' || $adr || '_en_' || $idgeto ];\r
$subscripcio ?\r
true :\r
bounce( ": Adreça no subscrita per a " || $idgeto ) };\r
\r
// Comprova si la subscripció ha estat renovada per al cicle actual\r
$__renovada = $adr => {\r
$renovacio = var[ 'renovacio_' || $adr || '_' || $idgeto ];\r
! $renovacio OR $cicle_actual > $renovacio ?\r
bounce( ": Subscripció de l'adreça no renovada per a " || $idgeto )\r
: $__subscrita( $adr ) };\r
\r
\r
// Consulta si hi ha cap avís per a adr__\r
$avis = $geto.avisos[ $adr__ ];\r
$avis_es_actual = $avis.temps + ( $generics.Lapse * 2 ) < timestamp;\r
if ( $avis AND $avis.rebot AND $avis_es_actual )\r
{ bounce ( $avis.text ); }\r
\r
\r
// Accions\r
$ACC = $__arg( 'accio' );\r
$_receptora = $ACC == 'Transfer' ? $__arg( 'receptora' ) : $_FOP;\r
\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 ( $es_en_getons ) {\r
$__activada( $adr__, $_estels );\r
if ( $ACC != 'Activacio' ) \r
{ $__activada( $adr__, $idgeto ); }\r
}\r
else if ( $ACC != 'Activacio' )\r
{ $__activada( $adr__, $_estels ); }\r
\r
// Activacio\r
if ( $ACC == 'Activacio' ) {\r
$condicions =\r
! $es_en_getons ?\r
$__activada( $adr__, $_estels ) ?\r
bounce( ': Adreça ja activada' ) :\r
true :\r
true\r
AND $__capacitada( 'activacio', $adr__ )\r
AND $__qtSuficient( 'Import_Activacio' )\r
AND $__arg( 'nom' );\r
}\r
\r
// Transfer\r
if ( $ACC == 'Transfer' ) {\r
$condicions =\r
$__activada( $_receptora, $_estels )\r
AND $__activada( $_receptora, $idgeto )\r
AND $es_en_getons ? $__capacitada( 'recepcio', $_receptora ) : true\r
AND $__subscrita( $adr__ ) ? $__renovada( $_receptora ) : true;\r
$subscripcio = var[ 'subscripcio_' || $_receptora || '_en_' || $idgeto ];\r
$derivacio = $qt * $subscripcio.derivacio / 100;\r
$qt_def = $subscripcio ? $qt - $derivacio : $qt;\r
} else {\r
$qt_def = $qt;\r
}\r
\r
// Renovacio\r
if ( $ACC == 'Renovacio' ) {\r
$condicions =\r
$__subscrita( $adr__ )\r
AND $__qtSuficient( 'Import_Renovacio' );\r
\r
$cicle_renovat = var[ 'renovacio_' || $adr__ || '_en_' || $idgeto ];\r
if ( $cicle_actual > 1\r
AND $cicle_renovat\r
AND $cicle_actual == $cicle_renovat )\r
{ bounce( ': Cicle ja renovat' ); }\r
}\r
\r
// Subscripcio\r
if ( $ACC == 'Subscripcio' ) {\r
$condicions =\r
$__capacitada( 'subscripcio', $adr__ )\r
AND $__subscrita( $adr__ ) ? bounce( ': Adreça ja subscrita' ) : ''\r
AND $__qtSuficient( 'Import_Subscripcio' )\r
AND $__arg( 'nom' ) \r
AND $__arg( 'derivacio' );\r
}\r
\r
// Diposit\r
if ( $ACC == 'Diposit' ) {\r
$condicions =\r
$__capacitada( 'conversio', $adr__ )\r
AND $__renovada( $adr__ );\r
\r
$taxa_conversio = $params[ 'Taxa_Conversio' ];\r
$cicles_diposit = $params[ 'Cicles_Diposit' ];\r
$cicle_conversio = $cicle_actual + $cicles_diposit;\r
$taxa = round( $qt * $taxa_conversio / 100, 0 );\r
$qt_conversio = $qt - $taxa;\r
}\r
\r
// Contribucio\r
if ( $ACC == 'Contribucio' )\r
{ \r
// Ha de ser exclusivament en Estels\r
$__arg( 'ref' ); \r
}\r
\r
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "{ $geto }",
"outputs": [
{
"address": "{ $_receptora }",
"amount": "{ $qt_def }"
}
]
}
},
{
"if": "{ $derivacio }",
"app": "payment",
"payload": {
"asset": "{ $geto }",
"outputs": [
{
"address": "{ $_FOP }",
"amount": "{ $derivacio }"
}
]
}
},
{
"app": "state",
"state": "{\r
$ordinal = $__ordinal( $ACC );\r
\r
if ( $avis AND $avis_es_actual )\r
{ response[ 'AVÍS: ' ] = $avis.text; }\r
\r
// Registre Totals\r
$seccRef = 'total_' || $ACC || '_';\r
$ref_en = $seccRef || '_en_' || $geto;\r
$ref_de = $seccRef || '_de_' || $adr__ || '_en_' || $geto;\r
$ref_a = $seccRef || '_a_' || $_receptora || '_en_' || $geto;\r
$ref_de_a = $seccRef || '_de_' || $adr__ || '_a_' || $_receptora || '_en_' || $geto;\r
$totals[ $ref_en ] = $totals[ $ref_en ] + $qt;\r
$totals[ $ref_de ] = $totals[ $ref_de ] + $qt;\r
$totals[ $ref_a ] = $totals[ $ref_a ] + $qt;\r
$totals[ $ref_de_a ] = $totals[ $ref_de_a ] + $qt;\r
\r
response[ 'Totals en: ' ] = $geto;\r
$seccResp = 'Total ' || $ACC;\r
response[ 'Totals en: ' ] = $idgeto;\r
response[ $seccResp ] = $totals[ $ref_en ];\r
response[ $seccResp || ' de ' || $adr__ ] = $totals[ $ref_de ];\r
response[ $seccResp || ' a ' || $_receptora ] = $totals[ $ref_a ];\r
response[ $seccResp || ' de ' || $adr__ || ' a ' || $_receptora ] = $totals[ $ref_de_a ];\r
\r
// Registre Derivacions\r
if ( $__subscrita( $_receptora ) ) {\r
$ref_derivs_en = 'total_Derivacions_en_' || $geto;\r
$ref_derivs_de = 'total_Derivacions_de_' || $_receptora || '_en_' || $geto;\r
$totals[ $ref_derivs_en ] = $totals[ $ref_derivs_en ] + $derivacio;\r
$totals[ $ref_derivs_de ] = $totals[ $ref_derivs_de ] + $derivacio;\r
\r
response[ 'Total Derivacions ' ] = $totals[ $ref_derivs_en ];\r
response[ 'Total Derivacions de ' || $_receptora ] = $totals[ $ref_derivs_de ];\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
$escala = 1;\r
} else {\r
$data_cicle_actual = $basiques.data_cicle_actual;\r
$data_cicle_anterior = $basiques.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_derivacions = $totals[ 'total_Transfers_a_' || $_FOP || '_en_' || $_estels ];\r
if ( ! $total_derivacions ) { $nova_escala = 1; }\r
else { $nova_escala = length( $total_derivacions ) -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 = $basiques.escala_actual;\r
}\r
}\r
$basiques.cicle_actual = $nou_cicle;\r
$basiques.data_cicle_actual = $nova_data;\r
$basiques.data_cicle_anterior = $nova_data_cicle_anterior;\r
$basiques.escala_actual = $nova_escala;\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
\r
// Registre Activacions\r
if ( $ACC == 'Activacio' ) {\r
$activacio =\r
{\r
nom: $args.nom,\r
qt: $qt_def,\r
cicle: $nou_cicle,\r
ordinal: $ordinal,\r
escala : $es_en_getons ? 100 : var[ 'escala_actual' ]\r
}; \r
$dades.activacions[ 'activacio_' || $adr__ || '_en_' || $idgeto ] = $activacio;\r
response[ 'Resultat: ' ] =\r
"Activació #" || $ordinal || " amb nom: " || $args.nom\r
|| " de l'adr " || $adr__ || " per operar amb " || $idgeto;\r
}\r
\r
// Registre Subscripcions\r
if ( $ACC == 'Subscripcio' ) {\r
$dades.subscripcions[ 'subscripcio_' || $adr__ || '_en_' || $idgeto ] =\r
{\r
nom: $args.nom,\r
cicle: $nou_cicle,\r
ordinal: $ordinal,\r
derivacio: $args.derivacio,\r
};\r
response[ 'Resultat: ' ] = \r
"Subscripció #" || $ordinal || " amb nom: " \r
|| $args.nom || " de l'adr " || $adr__ || " per al cicle "\r
|| $nou_cicle || 'per operar amb ' || $idgeto;\r
}\r
\r
// Registre Renovacions\r
if ( $ACC == 'Renovacio' ) {\r
$dades.renovacions[ 'renovacio_' || $adr__ || '_en_' || $idgeto ] = $cicle_actual;\r
response[ 'Resultat: ' ] =\r
"Renovació de la subscripció per al cicle " || $cicle_actual\r
|| " de l'adr " || $adr__ || ' en ' || $idgeto;\r
}\r
\r
// Registre Dipòsits\r
if ( $ACC == 'Diposit' ) {\r
$ref = 'diposit_' || $ordinal || '_en_' || $idgeto;\r
$dades.diposits.darrer_diposit = $ref; // Per als TESTS\r
$dades.diposits[ $ref ] =\r
{\r
dipositant: $adr__,\r
qt_diposit: $qt,\r
qt_conversio: $qt_conversio,\r
cicle_conversio: $cicle_conversio,\r
taxa: $taxa_conversio,\r
temps: timestamp,\r
cicle: $nou_cicle,\r
geto_diposit: $idgeto,\r
};\r
response[ 'Ref dipòsit' ] = $ref;\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
// Registre Contribucions\r
if ( $ACC == 'Contribucio' ) {\r
$ref = 'contribucio_' || $ordinal;\r
$dades.contribucions[ $ref ] =\r
{\r
contribuidora: $adr__,\r
qt: $qt,\r
temps: timestamp,\r
cicle: $nou_cicle,\r
escala: $basiques.escala_actual,\r
};\r
response[ 'Ref contribucio' ] = $ref;\r
response[ 'Contribuidora' ] = $adr__;\r
response[ 'Qt' ] = $qt;\r
response[ 'Cicle actual' ] = $nou_cicle;\r
response[ 'Escala actual' ] = $basiques.escala_actual;\r
}\r
\r
\r
// -- Nou Portal\r
if ( $args.nou_portal ) {\r
var[ 'anterior_portal' ] = var[ 'nou_portal' ];\r
var[ 'nou_portal' ] = $args.nou_portal;\r
response[ 'Nou portal de _Getons ' ] = $args.nou_portal;\r
}\r
\r
\r
// -- Actualització dades\r
if ( $args.copia_dades ) {\r
\r
$dades_darrera_versio = var[ $darrera_versio ][ 'dades' ];\r
\r
if ( ! $args.totes ) {\r
$__valvar = $refvar => {\r
$dades[ $refvar ] =\r
$args[ $refvar ] ?\r
$dades_darrera_versio[ $refvar ] :\r
{};\r
};\r
\r
$refs = [\r
'basiques', 'totals', 'activacions', 'subscripcions', \r
'renovacions', 'diposits', 'contribucions', 'ordinals'\r
];\r
\r
$valora = map( $refs, 8, $__valvar );\r
}\r
} else {\r
$dades.basiques = $basiques;\r
$dades.totals = $totals;\r
$dades.ordinals = $ordinals;\r
}\r
\r
var[ 'dades' ] = $args.totes ? $dades_darrera_versio : $dades;\r
response[ 'acció realitzada' ] = $ACC;\r
}"
}
]
}
]