Versione 1.00 di Rodolfo Calzetti (postmaster@rudyz.net) Analizziamo due problematice aziendali ce possono essere affrontate con lo stesso strumento! il clustering dei mo"imenti. Legend # un modulo di Corsaro integrato con la gestione $i Cubo ("edi documento relati"o)% ce consente di indi"iduare e inserire in una pratica tutti i mo"imenti ce ineriscono ad una stessa situazione. &aremo due esempi. Riconciliazione bancaria 'i configurano due liste( una "err) popolata dai mo"imenti come sono registrati dall*azienda! l*altra dai mo"imenti rice"uti da remote ban+ing. ,l soft-are consente di abbinare le due immagini dello stesso mo"imento e controllare% cos.% l*operato della banca. Le liste% in tale configurazione% sono due e di segno opposto in modo da /uadrare a zero. ,n pocissimi istanti il programma # in grado di abbinare migliaia di mo"imenti. Gestione incassi 0uesta applicazione dei processi di clustering # pi1 interessante% specialmente per /uelle aziende ce offrono ser"izi al dettaglio. 2a una parte ci sono le fatture (o i tributi% se trattasi di $ubblica Amministrazione) ce esprimono un 3"alore3 ce l*azienda d) al cliente4utente sotto forma di prodotto o di ser"izio. 2all*altra ci sono i pagamenti del cliente% effettuati in tempi successi"i all*emissione della fattura4cartella. 5li incassi potrebbero essere complessi. 6n bonifico potrebbe pagare molte fatture( il file C7, pro"eniente dalla banca potrebbe non a"er conser"ato il riferimento ai numeri fattura. ,n tal caso non sarebbe possibile un riconoscimento uno a uno. ,l programma # per8 dotato di un algoritmo esclusi"o ce # in grado di o""iare alla complessit) del cosiddetto 3problema delle somme parziali3 ce consiste nell*estrarre da un insieme di numeri un sottoinsieme di somma data. Le liste% in tale configurazione% potrebbero essere una% due o molte% ma tutte con lo stesso segno positi"o poic9 saranno i mo"imenti ce le popolano ad a"ere segno opportuno. ,l modulo # strettamente collegato alla gestione processi e pratice. 'e un incasso # problematico lo si pu8 assegnare a un ufficio legale con una transizione di stato. 'cript addon 5li script assistono nell*assegnare uno stesso "alore al campo CL6':;R,2 dei mo"imenti ce si suppone "adano inseriti nella stessa pratica. <egli script il programmatore a a disposizione un oggetto $SEEKER (da cui =Legend> per il nome del modulo) ce fornisce metodi utili allo scopo. <el seguente esempio% uno script $?$ per un abbinamento elementare basato sull*identit) degli importi! <?php function legendMain(){ global $SEEKER; // L'!!E"" $SEEEKER #$"%E$E SL LE #&%'(% )E% RE#R) // *R+ %L #'R%#'ME$" )% ",""% % )'"% $SEEKER-.dataload();
// %$%+%'L%++ L' 7R!RESS%$E )% '('$+'ME$" )' #M,$%#'RE 'L #L%E$" $SEEKER-.p/og/e00init(count($e0ta6ount)); // S#'$)%S# % M(%ME$"% %$"ER$% fo/each($int a0 $6o9){ // '('$+'ME$" )% ,$ $ELL' $SEEKER-.p/og/e00(); // #ER# ,$ M(%ME$" ES"ER$ #$ L S"ESS %M7R" $i1a//a8<0ea/ch(-$int0ignu6:$6o934'M,$"45= $e0ta6ount); if($i>11fal0e){ // 'SSE!$ ,$ $,( #L,S"ER%) 'L M(%ME$" %$"ER$??? $#L,S"ER%)1$SEEKER-.clu0te/i@e($6o934SAS%)45); // ??? E L 'SSE!$ '$#&E 'L M(%ME$" ES"ER$ )' 'BB%$'RE $SEEKER-.clu0te/i@e($e0t3$i534SAS%)45= $#L,S"ER%)); // "L! %L M(%ME$" ES"ER$ )'LL' L%S"' // 7ER $$ #$S%)ER'RL $E% 7'SS% S,##ESS%(% un0et($e0ta6ount3$i5); ; ; /etu/n t/ue; ; ?. il "ettore associati"o $SEEKER-.bag0 contiene dati e propriet) delle liste di mo"imenti come sono state definite nella funzione =Configurazioni>. , metodi di $SEEKER sono elencati di seguito( per lista si intende un "ettore di SYSID (identificatori uni"oci di sistema% "edere documento sysid.pdf)( per tabella si una matrice di "alori( per mappa si intende un "ettore di trasformazione degli indici ce consente di leggere una lista in modo ordinato o per parzializzarla. Carica in memoria tutti i dati delle liste (se # specificato $NAME% "iene caricata soltanto la lista con /uel nome)! $SEEKER-.dataload($$'ME144) Assegna ai mo"imenti% le cui cia"i sono incluse in una lista $arrows% un CLUSTERID ce pu8 essere passato o""ero creato contestalmente e restituito! $SEEKER-.clu0te/i@e($a//oC0= $#L,S"ER%)144) 6tilizza il "alore restituito da una funzione ($funct) per aggregare i mo"imenti di una lista di nome $bagna!! $SEEKER-.pa/tition($bagna6e= $funct) Riempie una mappa $ind!" per leggere in modo ordinato una tabella rispetto a una sua colonna! $SEEKER-.indeD($table= $colu6n= 2$indeD= $o/de/14.4) ;ffettua una ricerca su una tabella indicizzata e restituisce la mappa degli elementi tro"ati! $SEEKER-.0ea/ch($table= $colu6n= $9alue= $indeD) &unzioni per effettuare una ricerca numerica mediante il cosiddetto A#gorito %!ro ed estrarre un sottoinsieme (mappa) la cui somma eguagli il "alore di calibrazione $gaug!! $SEEKER-.6a/Eo9<initiali@e() $SEEKER-.6a/Eo9($table= $gauge= $tole/ance1F?FFFG) $SEEKER-.6a/Eo9<te/6inate() Ricerca testi in modo euristico! $&a#u! "iene cercato nella sulla colonna $co#un a meno riordinamenti di parole e piccole distanze di L!&!nst!in( il risultato "iene restituito in una mappa! $SEEKER-.06a/t($table= $colu6n= $9alue) Restituisce una tabella con i mo"imenti le cui cia"i sono prese da una lista! $SEEKER-.li0tHtable($li0t) Crea una tabella $targ!t tra"asando "alori dai dati di una tabella $sourc! parzializzati da una mappa $ap! $SEEKER-.6apHtable($0ou/ce= 2$ta/get= $6ap) Riempie un tabella $targ!t con le colonne SYSID e $co#un a partire da $sourc!! $SEEKER-.colu6nHtable($0ou/ce= $colu6n= 2$ta/get) Restituisce una tabella $targ!t dei soli elementi liberi di un*altra tabelle $sourc!! $SEEKER-.tableHf/ee($0ou/ce= 2$ta/get) Restituisce un "ettore associati"o con informazioni e totalizzazioni dedotte da una data tabella! $SEEKER-.getinfo($table) <ormalizza una stringa per creare cia"i da ordinare! $SEEKER-.pad0t/ing($9alue= $0i@e1IF) <ormalizza una data per creare cia"i da ordinare! $SEEKER-.paddate($9alue) <ormalizza un numero per creare cia"i da ordinare! $SEEKER-.padnu6be/($9alue) <ormalizza un "alore booleano per creare cia"i da ordinare! $SEEKER-.padboolean($9alue) Calcola i giorni fra date =@@@@AA22>! $SEEKER-.datediff($dG= $dH) Aggiunge giorni a una data =@@@@AA22>! $SEEKER-.dateadd($d= $da80) 5estione della progressione di a"anzamento! $SEEKER-.p/og/e00enabled($0i@e1GFFF) $SEEKER-.p/og/e00init($total) $SEEKER-.p/og/e00() 5li script possono essere censiti sotto il men1 =Legend> come nell*esempio! ,l posizionamento predefinito degli script # =Jcu0to6i@e/<legend/>. Configurazioni La funzione consente di definire delle modalit) di ricerca. ,nnanzi tutto possono essere specificati gli script ce go"ernano la clusterizzazione! La tolleranza # un parametro ce% all*atto della ciusura di una pratica di abbinamento% impedisce l*operazione se il saldo s/uadra oltre il "alore specificato. B ance possibile definire numero e caratteristice delle liste di ricerca (denominate =/uery>). :ra le propriet) di una lista segnalo id dati (Int!rni es Est!rni dell*esempio)% vista ("alore facoltati"o% utile per a"ere a disposizione ance campi in CD,<)% select (elenco parziale di campi da estrarre per ridurre al minimo l*impiego di memoria)% parametri ("ettore C'D< ce definisce la mascerina di opzioni per l*estrazione dei mo"imenti)% where (parametri fissi di estrazione)% colonne (definizione delle colonne delle liste estratte). <ell*esempio si noti la condizione #$S%S"E$#A1G( il campo standard C'NSISTENCY indica il grado di (concr!t!))a* del mo"imento! se A d) E00 euro a B il mo"imento # (!ff!tti&o* (#$S%S"E$#A1F)( se A d) un tele"isore a B del "alore di E00 euro% il mo"imento di E00 euro ce rappresenta il totale fattura (mo"imento interno) # una (!+ui&a#!n)a* (#$S%S"E$#A1G). Clustering 6na "olta configurato L!g!nd si pu8 passare alla pratica /uotidiana con la funzione C#ust!ring. 'i scelgono la modalit) operati"a e i parametri di estrazione! ci8 determina il caricamento delle liste dei mo"imenti in sospeso ce "anno riconciliati. L*atti"it) di atc,ing si articola in tre fasi! L*arriccimento di una pratica di abbinamento pu8 essere effettuato su pi1 sessioni di la"oro mano a mano ce gli incassi "engono importati nel sistema. Le pratice possono essere aperte col modulo Pi Cubo (leggere il documento picubo.pdf) per perfezionarle con annotazioni e atti"it). Quest'opera di RODOLFO CALZETTI (http://www.rudy.!et" e #e idee i$i %o!te!ute so!o state ri#as%iate %o! #i%e!a CREATI&E CO''O() ATTRI*+ZIO(E , CO(DI&IDI ALLO )TE))O 'ODO -.. ITALIA. /er #e00ere u!a %opia de##a #i%e!a $isita i# sito we1 http://%reati$e%o22o!s.or0/#i%e!ses/1y,sa/-../it/ o spedis%i u!a #ettera a Creati$e Co22o!s3 454 )e%o!d )treet3 )uite -..3 )a! Fra!%is%o3 Ca#i6or!ia3 784.93 +)A.