CaliuCampanya contra les patents de programari - English

Tràmit de la proposta de directiva per patentar programari

Introducció

La Comissió Europea, ha presentat la proposta de directiva COM (2002) 92, 2002/0047 "on the patentability of computer-implemented inventions" que permet patentar programari, matemàtiques, mètodes de negoci i qualsevol cosa que es pugui expressar en termes informàtics. El Parlament Europeu ha introduït força esmenes per evitar les patents de programari, però el procediment legislatiu continua.

Intentarem recollir aquí tota la informació que puguem sobre el mecanisme polític de decisió que es farà servir, les persones que hi poden influir, les dates, les institucions i les maneres més efectives de comunicar la nostra oposició a la mesura.

Teniu en compte que jo sóc un informàtic que no tinc ni idea de lleis, política o tractats, i per tant informo de bona fé, intentant ser útil, però hi pot haver moltes equivocacions, omissions o males interpretacions . Intentaré citar les fonts sempre que pugui per facilitar les correccions. Si us plau, envieu-me totes les correcions, idees, aportacions, etc. que creieu oportunes.

Les institucions europees

Les tres que ens afecten són la Comissió Europea, el Consell, i el Parlament Europeu, definides en el tractat de la Unió (tractat de Niça i anteriors) i eltractat d'accés dels nou membres de la UE (cal parar atenció en les mesures permanents a partir de l'1 de novembre de 2004 i les transitòries entre l'1 de maig de 2004 i 31 d'octubre de 2004).

Comissió Europea

També se'n diu Comissió de les Comunitats Europees (CEC, en anglès). Fa d'administració i proposa legislació. Té 20 membres escollits pel seu president. Els governs dels estats trien el president de la Comissió per 5 anys renovables i ho aprova el Parlament Europeu. La Comissió s'organitza en direccions generals. Està regulada pels articles 211-219 del tractat. Aprova els seus acords per majoria.

La direcció general de Mercat Intern, encapçalada per Frits Bolkestein, ha sigut la que ha proposat la directiva, després de diferents intents sense èxit de permetre la patentabilitat (un estudi encarregat a mida i poc propici, una consulta que resultà clarament contrària, etc.). Ja li ha explicat tothom els perills de la proposta però no només no ha parat els peus a l'OEP sinó que intenta cobrir les seves aventures interpretatives, protegint els interessos del gremi de les patents i alguna multinacional d'USA o Japó (com ara Microsoft i altres de la BSA). També ha amenaçatamb retirar la directiva si el Parlament Europeu l'esmenava com va fer, i recòrrer a imposar els canvis en la Convenció de la Patent Europea, deixant el Parlament Europeu al marge.

Altres direccions generals no semblen oposar-s'hi prou, tot i que hi ha veus discrepants.

Nota: cap allà el 1999 hi va haver una restructuració de direccions generals i van perdre els números que tenien. Tot i que ja no hi ha cap DG IV o DG XII la gent encara en parla per costum i ens podem trobar documents antics que s'hi refereixin. Per això hem penjat la llista de noms i números de direccions generals obsolets

El Consell

La nomenclatura de les institucions europees pot ser confusa, entre tantes llengües i institucions. Hi ha dos consells a l'Unió Europea (i un a fora):

El Consell d'Europa.
Aquest no té res a veure amb el que discutim, no forma part de la Unió Europea.
El Consell Europeu
Aquest sí que està a la Unió Europea. És la reunió de caps dels estats membres de la Unió que es reuneixen 4 cops a l'any (per exemple a Barcelona el Març de 2002). El seu paper és pendre decisions polítiques, no legislar. Per tant tampoc és el que ens ocupa. La presidència l'ocupa un estat cada sis mesos, per torns. El primer semestre de 2002 la presidència és per Espanya, i el segon per Dinamarca, el 2003 Grècia i Itàlia, el 2004 Irlanda i Països Baixos, etc...
El Consell de Ministres, també anomenat Consell de la UE o simplement Consell
Aquest reuneix els ministres dels estats membres (o representants amb autoritat equivalent) per decidir sobre legislació europea. S'havia de reunir el 10 de novembre de 2003 per decidir sobre la directiva de patents de programari, però s'ha ajornat per ara fins el 17 de maig de 2004. En tots els nostres textos ens referim a aquest Cosell.

Formalment, les decisions es prenen, segons els casos per (article 205):

Vots per a cada estat
vots fins a l' 1 de maig de 2004 vots entre l'1 de maig de 2004 i l'1 de novembre de 2004 vots a partir de l'1 de novembre de 2004
Majoria qualificada 62 88 232
Vots en total 87 124 321
Estat
Alemanya 10 10 29
França 10 10 29
Itàlia 10 10 29
Regne Unit 10 10 29
Espanya 8 8 27
Polònia 0 8 27
Països Baixos 5 5 13
Bèlgica 5 5 12
Txèquia 0 5 12
Grècia 5 5 12
Hongria 0 5 12
Portugal 5 5 12
Austria 4 4 10
Suècia 4 4 10
Dinamarca 3 3 7
Lituània 0 3 7
Eslovàquia 0 3 7
Irlanda 3 3 7
Finlandia 3 3 7
Estònia 0 3 4
Eslovènia 0 3 4
Letònia 0 3 4
Xipre 0 2 4
Luxemburg 2 2 4
Malta 0 2 3

Hi ha un representant (ministre o similar) de cada estat membre. Les decisions s'acostumen a prendre en trobades sectorials de ministres del mateix ram de tots els països. Per tant per influenciar el Consell cal parlar amb els ministeris corresponents de l'estat (o amb gent que hi pugui influir). Tot i això els detalls (que és l'important) els arrangen alts funcionaris en grups de treball específics, com el reunit el 23 d'octubre de 2003 sobre la directiva de patents de programari.

El negociador espanyol sobre patents de programari al grup de treball del Consell que va elaborar la proposta que presentaria Irlanda era Eduardo Martín, a qui es pot enviar correu electrònic des de la pàgina de l'Oficina Espanyola de Patents i Marques. Convé llegir-se abans els consells de proinnova. A la resta d'estats membres els representants al grup de treball del Consell també venen de les respectives oficines de patents.

Inicialment França es va pronunciar en contra de les patents de programari, Regne Unit a favor. La presidència danesa semblava molt partidària de les patents de programari. El 2002 va presentar una proposta que fins i tot ampliava les maneres possibles de patentar programes.

Després del vot en primera lectura del Parlament Europeu (setembre 2003) es va reunir el grup de treball del Consell amb representants de les oficines de patents, i va elaborar una proposta, que la presidència irlandesa va presentar el 2004 que és esencialment el mateix contingut que la de 2002, però incorporant les pitjors esmenes del Parlament Europeu, o aquelles merament decoratives.

Aquesta proposta irlandesa va ser criticada en unes jornades de conferències i mobilitzacions l'abril de 2004. Després van seguir les negociacions i el Consell va denegar l'accés als documents de treball (fins una setmana després de la votació), alegant que l'interés del Consell per negociar amb comoditat era més important que l'interés públic en saber el que discutien. Però s'ha filtrat un document que revela l'estat de la negociació abans de la reunió del 5 de maig de 2004. El document filtrat desinforma de diversos punts, i indica reserves d'Alemanya, França (però potser no massa oposada perquè diu que tenia "una actitud positiva a nivell tecnic", sic), Espanya, Bèlgica i Dinamarca. Però el 5.5.2004 en la reunió de Coreper (veure més avall) França i Espanya haurien acceptat fer la proposta irlandesa un "item-A" (o sia, un punt acceptat per assentiment, sense debat ni votació) per al Consell de ministres de la UE de Competitivitat del 17.5.2004. Eslovàquia també s'hauria oposat a la proposta de la presidència irlandesa. Però no tinc fonts oficials d'aquesta informació.

Posteriorment hi va haver protestes i conferències a diferents punts d'Europa.A Madrid es van lliurar 25000 signatures. A València i altres llocs també hi va haver actes. Finalment la directiva va passar a ser un item-B (o sia, amb debat i votació, no aprovat per assentiment) i es va programar pel 18.5.2004. Els dies abans molts polítics i membres de governs europeus van mostrar oposició a la proposta irlandesa.

En el debat del dia 18.5.2004 els diplomàtics dels estats membres es van mostrar prou en desacord al principi com per bloquejar la directiva. Sorprenentment, però, després del descans, la Comissió Europea (Bolkestein) va proposar canvis insignificants i estats com Alemanya o altres van acceptar la proposta, arribant a una apurada majoria qualificada. Dinamarca, que estaba representada per un càrrec inferior al normal, va titubejar i va ser presionada verbalment per la presidència irlandesa fins que va acceptar (gens explícitament). Vegeu l'animació (4Mb) que ho explica. La nota de premsa de la presidència Irlandesa deia que Espanya s'hi havia oposat, amb Itàlia, Bèlgica i Àutria com abstencions. El representant de Polònia però, diu que ell també es va abstenir. Amb les normes de maig, això vol dir que faltaven 2 vots per bloquejar la decisió (amb les normes de Niça en sobrarien uns quants, però no s'apliquen fins al novembre). Si qualsevol estat dels que va votar que sí (si és que van votar que sí) s'hagués abstingut ja no s'hauria aprovat.

Normalment, després de l'acord polític dels diplomàtics al Consell de Ministres de la UE, faltaria només una aprovació formal automàtica al següent Consell (al juny?). Tanmateix, les irregularitats en aquesta votació han provocat reaccions a molts llocs. Els lliberals alemanys han proposat una moció al Parlament alemany per canviar la postura alemana. Els comunistes portuguesos han fet el mateix al Parlament portugués. Al Parlament holandès diu que hi haurà un debat el 3 de juny de 2004 a la tarda. La decisió al consell encara podria doncs canviar, sembla ser que alguna vegada passa quan el vot no reflexa la posició dels governs.

En el cas espanyol, els ministres responsables van ser primer Piqué i després Costa (del Ministeri de Ciència i Tecnologia). Però va canviar el govern abans de la votació. A la reunió del Consell de ministres de la UE sobre la directiva de patents de programari, del 18 de maig de 2004, hi va anar el Secretario de Estado para la Unión Europea, Alberto Navarro (Tlf 91 3798300). Però va ser el ministeri d'Indústria (de Montilla) el que va treure el mateix dia la nota de premsa explicant el vot. El vot espanyol va ser el millor d'aquella reunió de ministres, ben justificat i sense deixar-se entabanar per les maniobres d'Irlanda i la Comissió.

El representat de la Comissió Europea al grup de treball del Consell sobre patents de programari sembla ser la oficina de patents europea, que ni pertany a la Comissió ni a la UE, ni és en absolut imparcial.

Com que els ministres tenen feina als seus respectius països, hi ha un Comité de Representants Permanent (COREPER) que es reuneix cada setmana a Brussel·les i es cuida del dia a dia i de supervisar uns altres 250 comités de funcionaris que preparen els detalls tècnics. Més detalls sobre el funcionament de COREPER a wikipedia i una guia sobre el Consell

El Parlament Europeu

Hi ha 626 eurodiputats (788 el maig de 2004, 732 apartir de juny de 2004, 786 quan entrin Bulgaria i Romania, 736 després de 2009, apparentment) votats directament pels ciutadans europeus cada 5 anys. La circumscripció electoral és tot l'estat membre, crec, excepte per al Regne Unit i Baviera. Els detalls són diferents a cada estat membre. Alguns d'ells són també diputats al parlament de l'estat membre. Al llarg dels anys ha passat d'un paper simplement consultiu a un de més decisori en legislació sobre alguns temes, com per exemple la directiva de patents de programari, que necessitarà la seva aprovació per prosperar.

Al parlament hi ha grups parlamentaris transnacionals, que agrupen partits polítics de diferents llocs amb ideologies semblants.

La directiva de patents de programari es va votar en sessió plenària el 24 de setembre de 2003. Es va aprovar la directiva amb 45 esmenes que en general posen limits a la patentabilitat de manera que impedeixen les patents de programari. Però encara queden parts sense corregir que serien favorables a les patents de programari i que introdueixen contradiccions. Per això és díficil interpretar amb exactitud els efectes del que es va aprovar. Estem molt agraïts als europarlamentaris que ho van fer possible. Hi va haver vora 130 esmenes, poc temps per avaluar-les des de la seva publicació i molta pressió. Però en el debat el dia anterior es veu que alguns havien entés força bé el problema. Tanmateix aquesta versió no serà la final. És només la primera lectura i encara n'hi haurà, probablement una segona i potser una tercera. No hi haurà temps de fer la segona lectura abans de les eleccions de juny de 2004, de manera que és possible que el nou Parlament Europeu decideixi recomençar el procés de codecisió (amb la incorporació de 10 nous estats membres la composició del nou Parlament Europeu pot ser força diferent). Per a que el text final eviti les patents de programari cal que el Parlament Europeu es mantingui ferm en la seva posició (o rebutgi la directiva i deixi la llei actual).

Els parlamentaris es divideixen la feina creant comissions de treball sobre cada tema. La comissió parlamentària que va tractar de patents de programari fou el

Committee on Legal Affairs and the Internal Market. (JURI)

És el comité que va presentar la proposta que votà el ple. És molt dolenta. La ponent de la proposta és la laborista nordirlandesa Arlene McCarthy. El seu esborrany d'informe dóna la raó a la Comissió i modifica poca cosa de la directiva, ignorant els documents que ha considerat (l'informe del Comité econòmic i Social de la UEi dels comités parlamentaris de cultura i d'indústria, aquest útlim votat dies després de publicar l'esborrany de la ponent).Vegeu una crítica més completa. Algunes de les esmenes de la resta de membres del comité estan bé com es comenta en aquest fil de discussió o document. Les esmenes transaccionals (1-3,4-5,6,...) no són gaire útils.

Per saber la posició de la ponent és útil llegir un document que va fer circular, i perquè ens sembla que s'equivoca.

Els dos documents de treball anteriors, una exposició de fets i una reflexió sobre la necessitat i inconvenients de les patents, estan força esbiaixats cap a la patentabilitat del programari. El Comité també ha presentat un estudi amb la Direcció General IV (Recerca), encarregat a Reinter Bakels i P. Bernt Hugenholtz, de l'universitat d'Amsterdam. L'estudi és millor que la majoria d'estudis oficials anteriors, però encara es queda curt.

El 7 de novembre va rebre experts en audiència . Pocs dels participants van mostrar-se partidaris de la directiva tal com la proposa la Comissió.

També hi ha el forum web del Comité, obert al públic (vegeu el fil número 6). Per escriure-hi cal registrar-s'hi i es pot demanar avisos per correu electrònic de nous missatges. Aquests missatges haurien d'arribar a les persones que més treballen en la proposta de directiva al Parlament, però ara aquest comité ja ha votat (tornarà a participar en la segona lectura si el Consell com es previsible no accepta completament el text del Parlament).

Aquest comité havia de tenir en compte l'opinió del Comité Econòmic i Social Europeu (una institució de la UE externa al Parlament Europeu) i dos altres comités del Parlament Europeu:

Committee on Industry, External Trade, Research and Energy (ITRE)

Aquest hauria de ser el comité més sensible a opinions d'investigadors i empresaris del sector. De l'opinió sobre la directiva de patents de programari se'n cuidava una lliberal holandesa, Elly Plooij-Van Gorsel. Va presentar un esborrany d'opinió que va en la bona direcció però no acaba de definir prou els límits de patentabilitat i deixa encara forats. Les seves esmenes i les dels altres grups (n'hi ha de bones i de dolentes) es van votar a aquest comité el febrer de 2003. El resultat de la votació va anar prou bé, excepte en que va deixar per definir la paraula "tècnic" que s'utilitza a tot l'articulat, de manera que segurament es podria malinterpretar per seguir concedint patents de programari. Veure un comentari. Per més informació crec que a la secretaria del comité hi ha Thierry Jacob

Committee on Culture, Youth, Education, the Media and Sport (CULT)
Se'n va cuidar el socialista francès Michel Rocard. El seu esborrany i la majoria d'esmenes proposades es van votar el gener de 2003, i el resultat només deixaria un o dos forats per on es podrien colar totes les patents de programari, i es corregirien tota la resta de perills de la directiva. Veure uncomentari.Per més informació crec que a la secretaria del comité hi ha Massimo Palumbo.

Les esmenes estan en format MS Word a la web del Parlament Europeu i en alguns idiomes en PDF (però hi ha una versió consolidada de com quedaria la directiva en html). També hi ha una valoració en preparació

Per més detalls vegeu la normativa del Parlament Europeu

El Comité Econòmic i Social Europeu

El CESE és un órgan consultiu de la UE que serveix per integrar les entitats civils en la política europea.
Ha emés un molt bon informe que crtica la proposició de directiva i fins i tot suggereix posar l'Oficina Europea de Patents com a part de la UE. L'informe ha de ser mencionat en la resolució del Comité d'Afers Legals del Parlament Europeu, però per desgràcia no estaven obligats a fer-ne cas.

El mecanisme de codecisió

La proposta de directiva es tramitarà segons l'article 251 (antic 189B) del tractat de la Unió (tractat de Niça,Amsterdam, Maastricht...). S'anomena el mecanisme de codecisió perquè les coses es decideixen a mitges entre el Consell i el Parlament Europeu, sempre a proposta de la Comissió.

La Comisió envia la proposta al Consell i el Parlament Europeu. El Parlament vota en una primera lectura si l'aprova, l'esmena o el rebutja, i el Consell pot estar-hi d'acord o no. Si hi està d'acord llestos, si no ha d'adoptar una posició comuna (posar-se "tots" els països d'acord). La Comissió opina i el Parlament Europeu ho torna a votar en una segona lectura. Si ho aprova o rebutja (1/2 de vots + 1) ja queda així, si introdueix esmenes el Consell decideix per majoria qualificada si accepta o no les esmenes. Si no les accepta totes es convoca un comité de conciliació format per 25 membres del Consell i 25 del Parlament que obté una proposta que tornen a votar el Parlament i el Consell en una tercera lectura. Si tots dos l'aproven queda aprovada i si algun dels dos la rebutja no. Hi ha una guia del Consell on es donen més detalls. I el EURIM també té un bon resum.

En general el Consell vota per majoria absoluta, però ja hem vist que a vegades ho fa per majoria qualificada, i per votar en contra de l'opinió de la Comissió cal unanimitat. Però vegeu els apartats sobre el Conselli l Parlament Europeu per més informació sobre com va el procés de codecisió a cada institució.

Aquest és si fa no fa el mecanisme formal. A la pràctica, per facilitar acords abans, sembla ser que es celebren reunions trilaterals entre el Consell, el Parlament i la Comissió per avançar feina, i arribar als plens amb les posicions ja definides. Pel que sembla el Parlament disposa de més personal i menys presa (els eurodiputats tenen mandats de 5 anys, i la presidència del Consell canvia cada sis mesos, durant els quals el país president vol poder presentar resultats). Això dona més marge de maniobra al Parlament del que es deriva estrictament de les competències otorgades pel tractat (que han anat augmentat al llarg del temps gràcies a aquest avantatge). La FFII té més pistes sobre els protagonistes i el procés de codecisió.

Pel que jo bonament entenc, el procediment de codecisió, portat a Java d'estar per casa, seria:

class Politics implements TreatyofNice, AllTheOtherStuffHopefully {
Directive codecisionProcedure(EuropeanParliament ep, Comission cec, Council council)
{
    

    //  proposal=cec.writeProposal();
    Directive proposal=cec.call(bsa);
    cec.send(proposal,ep) &
    cec.send(proposal,council);


    View opinion = ep.reading(1,proposal);


    if (council.qualifiedMajority(opinion)) {
         return opinion;
    }
    View commonPosition = council.discuss();
    while   (! council.qualified_majority(commonPosition)) {

            commonPosition = council.discuss();
    };
    

    council.send(commonPosition, ep);
    cec.send(cec.getPosition(commonPosition), ep);
        

    try {
             setTimeout(4*MONTH);
             View epOpinion = ep.reading(2,commonPosition);
             setTimeout(DISABLE);
         } catch (Timeout e) {
              commonPosition.setState(PASSED);
              return commonPosition;
         }

             if (epOpinion.ammendments.count() == 0) {
                 // accepted or rejected 
                 return epOpinion;
             } else { //ammended
                 ep.send(epOpinion, council);
                 setTimeout(4*MONTH);
                 try {
                     ep.send(epOpinion, cec);
                     View cecOpinion = cec.getOpinion(epOpinion);
                     boolean agreed = true;

                     for (i=0; (i < opinion.ammendments.count()) ; i++) {
                         Ammendment a = opinion.getAmmendment(i);
                         if (cecOpinion.agreesWith(a)) {
                             a.setApproved(council.qualifiedMajority(a));
                         } else {
                             a.setApproved(council.unanimity(a));
                         }
                         agreed = agreed && a.getApproved();
                     };
                 }  catch (Timeout e) {
                     agreed=false;
                 };

                 if (agreed) {
                     epOpinion.setState(PASSED);
                     return epOpinion;
                 };

                 setTimeout(8*WEEK); {
                 ConciliationCommittee cc;
                 try {
                      // Art 251 Treaty of nice. Members of council are
                      // one per EU member state.
                      cc = new ConciliationCommittee(
                                          council.pickRepresentatives(council.NUMBER_OF_MEMBER_STATES), 
                                          ep.pickRepresentatives(council.NUMBER_OF_MEMBER_STATES) );
                      
                      cc.listen(cec.getCommissioner());
                 }  catch (Timeout e) {
                     epOpinion.setState(REJECTED);
                     return null; 
                 };
                 setTimeout(8*WEEK); 
                 
                 View jointText
                 try {
                     jointText = cc.discuss();
                     while (!((cc.getCouncilRepresentatives().qualifiedMajority(jointText))
                              &&(cc.getEPRepresentatives().majorityOfMembers(jointText)))) {
                        jointText = cc.discuss();            
}          
                 }  catch (Timeout e) {
                     jointText.setState(REJECTED);
                     return null; 
                 };
                 setTimeout(8*WEEK); 
                 try {
                     cc.send(jointText,council);
                     cc.send(jointText,ep);
                     if ((ep.reading(3,jointText).state == PASSED) 
                         && council.qualifiedMajority(jointText)) {
                         jointText.setState(PASSED);
                         return jointText;
                     } else {
                         jointText.setState(REJECTED);
                         return null;
                     }
                 }  catch (Timeout e) {
                     jointText.setState(REJECTED);
                     return null; 
                 };
             }


    }
}


}


class EuropeanParliament {

    int NUMBER_OF_SEATS ;

    // constructor
    public EuropeanParliament(Votes elections) {
             // possibly wrong for dates < 1999, I haven't checked
         if (System.getCurrentDate() < "2004.05.1") {
           NUMBER_OF_SEATS = 626;
         } else {
          if (System.getCurrentDate() < "2004.06.13") {
             NUMBER_OF_SEATS = 788;
          } else {
            if (System.getCurrentDate() < "2009.06.13 aprox") {
              NUMBER_OF_SEATS = 732;
            } else {
              NUMBER_OF_SEATS = 736; // possibly, with Romania and Bulgaria 
        }
         buildPoliticalGroups();
         buildCommittees();
    }

    public View reading(int round, View proposal) {

        Committee rc = getRelevantCommittee(proposal);
        CommitteeSet rcs = getSomeOtherCommittees(proposal);
        if (round == 1) {
            rc.decideProcedure();
        };
        if (getRapporteur(proposal) == null) {
            setRapporteur( rc.appointRapporteur() );
        };
        Report draft = getRapporteur(proposal).writeReport(proposal);
        for (i=0; i<rcs.count(); i++) { 
            if (rcs.getCommittee(i).getOpinion() != null ) {
                draft.include(rcs.getCommittee(i).getOpinion());
            }
        };
        rc.listen(cec);
        boolean agreed = false;
        while (!agreed) {
            draft = rcs.discuss(draft);
            agreed = rc.vote(draft); // by majority of votes cast ?
                                     // depends on procedure? 
             // from "the trace" it seems it was by majority of votes cast 
        }
        if (round != 3) {
            draft.include(debateInPlenary(draft).getAmmendments());
        }
        switch (round) {
        case 1 : if (getVotesFor() > getVotesAgainst) {
                    draft.setStatus(PASSED); //possibly with ammendments
                 } else {
                    draft.setStatus(REJECTED); 
                 } 
            break;
        case 2 :  while ((draft.ammendments.count() > 0) 
                          && draft.getStatus() != PASSED) {
                    if (getVotesFor() > NUMBER_OF_SEATS / 2 ) {  
                            draft.setStatus(PASSED);
                    } else {
                        draft.dropAmmendments(some);
                    }
                  };
                  if (draft.ammendments.count() == 0) {
                      if (getVotesFor() > getVotesAgainst()) {
                          draft.setStatus(PASSED);
                      } else {
                          if (getVotesAgainst() > NUMBER_OF_SEATS / 2 ) {
                              draft.setStatus(REJECTED); 
                          }else {
                              raise TimeOut("No decision"); //not 100% sure
                          }
                      }; 
                  };
                  break;
          case 3 : if (getVotesFor() > getVotesAgainst) {
                    draft.setStatus(PASSED); //No ammendments allowed
                 } else {
                    draft.setStatus(REJECTED); 
                 } 
            break;
        }


    } 
}


class Council {

    int NUMBER_OF_MEMBER_STATES ; 
    int QUALIFIED_MAJORITY_VOTES; 
    int TOTAL_VOTES;
    final String states[] ;
    final int qualifiedVotes[];
   // constructor
    public Council() {
       if (System.getCurrentDate() < "2004.05.01") {
           NUMBER_OF_MEMBER_STATES = 15;
           QUALIFIED_MAJORITY_VOTES = 62;
           states = {
                      "DE","FR","IT","UK","ES","BE","GR","NE",
                      "PT","AT","SV","DK","FI","IE","LU"
                    };
          qualifiedVotes = {
                       10 , 10 , 10 , 10 ,  8 ,  5 ,  5 ,  5 , 
                        5 ,  4 ,  4 ,  3 ,  3 ,  3 ,  2
          };
          

         } else {
           if (System.getCurrentDate() < "2004.11.01") {
              NUMBER_OF_MEMBER_STATES = 25;
              QUALIFIED_MAJORITY_VOTES = 88;
              states = {
                      "DE","FR","IT","UK","ES","PL",
                      "BE","CZ","GR","HU","NE","PT",
                      "AT","SV","DK","EE","LT","SL","SK","LV","FI","IE", 
                      "CY", "LU", "MT"
                       };
              qualifiedVotes = {
                       10 , 10 , 10 , 10 ,  8 ,  8 ,  
                        5 ,  5 ,  5 ,  5 ,  5 ,  5 ,
                        4 ,  4 ,  3 ,  3 ,  3 ,  3 ,  3 ,  3 ,  3 ,  3 ,  
                        2 ,  2 ,  2
              };
          } else {
              NUMBER_OF_MEMBER_STATES = 25;
              QUALIFIED_MAJORITY_VOTES = 232;
              states = {
                      "DE","FR","IT","UK","ES","PL",
                      "NE","BE","CZ","GR","HU","PT",
                      "AT","SV","DK","LT","SK","FI","IE", 
                      "EE","SL","LV","CY","LU","MT"
                       };
              qualifiedVotes = {
                       29 , 29 , 29 , 29 , 27 , 27 ,  
                       13 , 12 , 12 , 12 , 12 , 12 ,
                       10 , 10 ,  7 ,  7 ,  7 ,  7 ,  7 ,  
                        4 ,  4 ,  4 ,  4 ,  4 ,  3
              };
            // todo: add Romania and Bulgaria in the future
          }

  
        }
         TOTAL_VOTES=0;
         for(int i=0; i<NUMBER_OF_MEMBER_STATES; i++) {
              TOTAL_VOTES += qualifiedVotes[i];
         } 
    }
 
    } 
    boolean qualifiedMajority(View proposal) {
        int votes = 0;
        int countries = 0;
        for(i=0; i < NUMBER_OF_MEMBER_STATES ; i++) {
            if (votesFor(states[i], proposal)) {
                votes += qualifiedVotes[i];
                countries ++;
            }
        };
       if (System.getCurrentDate() < "2004.05.01") {       
        return ( (votes >= QUALIFIED_MAJORITY_VOTES )  
                 && (cec.agrees(proposal) || countries >= 10)
                 );
       } else {
        return ( (votes >= QUALIFIED_MAJORITY_VOTES ) 
           && ( (cec.agrees(proposal) && (countries >= NUMBER_OF_MEMBER_STATES / 2) ) 
                || (countries >= NUMBER_OF_MEMBER_STATES * 2.0 / 3.0)   
               )
       }

    }
    boolean unanimity(View proposal) {
        boolean ok = true;
        for(i=0; ok && (i < NUMBER_OF_MEMBER_STATES) ; i++) {
            ok = votesFor(states[i], proposal); 
        };
        return ok;

    }
}

Espero que no estigui patentat :)..

Calendari

El Tractat i els reglaments defineixen terminis màxims entre les decisions del procés de codecisió, però això només dóna una idea del màxim de temps necessari. Les dates reals es fixen segons l'agenda dels implicats i no estan totes disponibles des del principi. S'ha d'anar vigilant algunes pàgines de la Unió Europea:

Vegeu també l'agenda amb altres actes.

$Id: codecisio.html,v 1.42 2004/06/09 19:24:49 xdrudis Exp $