Especificacions: cooperativa de consum

De Cacauet Wiki
Salta a la navegació Salta a la cerca

Una cooperativa de consum responsable de Manresa necessita una aplicació per gestionar les seves comandes des d'internet. Ens demana que li fem l'aplicació i comencem per anar descobrint com funcionen i redactant les especificacions per facilitar la implementació i desplegament de l'aplicació.


Projecte[modifica]

Aquest projecte s'està duent a terme amb Django i pensant en ser instal·lat en GAE (s'ha desestimat):

https://github.com/ecopro/almaixera/

El client: Què és una cooperativa de consum?[modifica]

El nostre client, la cooperativa "La Pera" es dedica a autogestionar la compra de productes que han de complir amb els requisits que ells estableixen per un consum responsable:

  • Agricultura i ramaderia ecològica
  • Producte de proximitat
  • Respecte al medi ambient
  • Comerç just

Cada dimarts tots els socis passen de 7:30 a 9:30 pel local i:

  • Recullen la comanda de producte fresc (fruita, verdura, pasta fresca, pa, ous, formatges, etc.) que han fet la setmana anterior.
  • Afegeixien el producte de stock que vulguin (muesli, arròs, cus-cus, farina, xocolata, etc.).
  • Paguen
  • Realitzen comanda per la setmana següent.

És en aquesta gestió de realitzar la comanda que el nostre client ens demana l'aplicació per facilitar que la gent la pugui fer per internet i per què faciliti la gestió amb els proveïdors.

Els socis s'organitzen en comissions de treball per realitzar les diverses tasques que cal fer per mantenir en funcionament la cooperativa:

  • Compres: visita i compra als productors locals.
  • Econòmiques: gestionen els cobraments de quotes, la caixa i el pagament als proveïdors.
  • Internes: organitzen els torns de caixes (repartir el producte fresc encarregat la setmana anterior) i els torns de neteja.
  • Infraestructures: realitzen el manteniment del local i logística (tuppers, envasos, etc.)
  • Externes: comuniació amb altres cooperatives, fires, esdeveniments, difusió, etc.

Com es pot veure, el soci és una persona activa que ha de realitzar diverses tasques per beneficiar-se de la gestió de productes pels que es vetlla que sigui de consum responsable (requisits abans esmentats).

Intentem redactar unes especificacions per realitzar l'aplicació que els resolgui gestionar les comandes per internet.


L'aplicació[modifica]

Tenim diverses facetes o cares de l'aplicació:

  • Client de la cooperativa (front-end): realitza comanda setmanalment després de la recollida i abans del dia de tancament (inicialment divendres migdia).
  • Gestors (back-end): posa preus, realitza comanda al proveïdor (informe per cadascun d'ells), imprimeix extractes per cada caixa (client de la cooperativa), controla stocks, etc.
    • Alliberada/at: control preus i quantitat arribada.
    • Compres: control stock/inventari.
    • Econòmiques: Cobraments a socis. Pagaments a proveïdors. Comptabilitat.
    • Torn repartiment: assignació del producte arribat a les caixes.
    • Internes: generació i control de torns (i notificació automàtica).

Tots els perfils s'han d'identificar (autentificació) correctament per poder entrar a l'aplicació, i s'han d'establir sistema de permisos (autorització) pels diferents perfils (client/gestor, fins i tot diversos tipus de gestor).


Podem distingir algunes views o vistes de l'aplicació:

  • Vista comanda: el client pot fer la comanda per la setmana següent.
  • Vista preus/control: l'alliberada posa/corregeix preus dels productes i la quantitat arribada efectivament el dia d'entrega.
  • Vista repartiment: els que tenen torn de caixes introdueixen la quantitat de producte que es posa a cada caixa (després de pesar-se).
  • Vista stock/inventari: modifiquem la quantitat de producte disponible segons ens arriba o fem inventari. Ens avisa dels productes de stock que baixen d'existències.
  • Vista cobrament: (econòmiques) per cobrar als socis la comanda actual.
  • Vista pagaments: (econòmiques) per pagar als proveïdors el consum efectiu a final de mes.
  • Vista torns: (internes) calendari per assignar els torns. Enviarà un SMS/email/missatge automàtic el dia abans als socis que tinguin torns. Pot generar els torns automàticament pel següent trimestre basat en una ponderació per cada caixa (segons estiguin alliberats total o parcialment, permís maternitat, etc.).



Especificacions funcionals[modifica]

Especificacions per als clients[modifica]

  1. Han de poder connectar-se i identificar-se, amb un o diversos sistemes oberts com OAuth (facebook), Google Accounts o OpenID. Si no queda més remei es pot fer amb comptes propis però es vol evitar el manteniment d'usuaris i contrasenyes.
  2. Cada comanda ha de mostrar diverses entrades.
  3. Cada entrada tindrà un producte (IDproducte) i la quantatitat (que depenent del producte seran per kg, manats, unitats, etc.).
  4. Han de poder triar la setmana d'entrega del producte (menú desplegable o combo box). El dia de la setmana d'entrega (dilluns, dimarts, etc.) ve predeterminat per gestor.
    1. Per defecte apareixerà l'entrega per la setmana següent.
    2. El desplegable mostrarà com a opcions les properes 4 setmanes.
  5. Ha de tenir la opció d'afegir productes en stock (no sota comanda) però han de figurar en una categoria a part.
  6. El client ha de veure una estimació del cost de la seva comanda dinàmicament a mesura que afegeix els productes (dividits entre productes sota comanda i en stock).
  7. El client finalment validarà i blocarà la seva comanda.
    1. Si el client vol modificar la comanda haurà de desblocar-la, i només pot fer-ho des del dia d'entrega fins el dia de tancament (dia de la setmana en què es tanca la comanda i s'efectua la petició als proveïdors).
    2. Inicialment el dia d'entrega és dimarts i el dia de tancament serà divendres migdia, per poder notificar els productors abans del cap de setmana).
    3. El client rebrà un email de notificació de la comanda efectuada amb la relació de productes i el cost estimat desglossat.
  8. Cada client només pot fer una comanda per setmana (* a revisar).
  9. El dia d'entrega de comanda el client podrà obrir una entrega de client.
    1. Aquesta entrega serà una còpia de la seva comanda, on podrà efectuar modificacions segons el què hagi rebut efectivament.
    2. L'entrega calcularà el preu dels productes comprats finalment per poder pagar a caixa.
  10. Menus client (resum):
    1. Fer Comanda
    2. Modificar comanda (abans de tancament)
    3. Veure torns
    4. Recollida (pagament)
      1. Només dia de recollida durant el seu horari.
      2. No es pot esborrar ítems (per evitar errades).
      3. Sí es poden afegir i modificar quantitats entregades.
    5. Fer caixa
      1. Les persones de torn de caixa poden accedir durant l'horari de caixa.
      2. Llistat per productes (que s'hagin demanat aquell dia).
      3. Clicant el producte et surten caixa (no editable), quantitat_demanada (no editable) i quantitat_entregada (editable).
      4. Assignació de quantitat real repartida.
      5. Dues vistes:
        1. Totes les caixes que han demanat el producte.
        2. Caixa per caixa (es guarda al clicar "següent").
  11. ...

Especificacions per als gestors[modifica]

  1. Han de poder donar d'alta i baixa usuaris basant-se en el sistema triat d'autenticació (OAuth, Google, OpenID, comptes de l'aplicació, etc.).
    1. S'intentarà evitar manteniment d'usuaris i contrasenyes mitjançant sistemes d'autenticació oberts.
  2. Ha de triar el dia i hora d'entrega de productes de la cooperativa (en principi dimarts a les 6, ja que els socis arriben a les 7:30). Això afecta als proveïdors (entrega de productes) i als clients (dia de recollida de comanda).
  3. Ha de triar el dia i hora de tancament a partir del qual les comandes no es poden modificar.
    1. Inicialment serà divendres migdia per poder notificar els proveïdors abans del cap de setmana.
  4. Control de productes:
    1. Hi ha 2 tipus: productes sota comanda i productes en stock.
    2. Les comandes dels diferents tipus de producte (comanda, stock) han de ser clarament diferenciades.
    3. Ha de poder donar d'alta nous productes, que tindran els atributs preu, proveïdor, indicador comanda/stock, stock, disponible.
      1. El camp stock serà ignorat si és sota comanda.
      2. "Disponible" permetrà controlar si es mostra o no als clients.
    4. Ha de poder actualitzar el valor del stock.
    5. El stock ha de poder ser un valor negatiu, per si no ha tingut un control correcte (inventari). Es permetrà incloure-ho a la comanda però es mostrarà en vermell al client i s'enviarà un avís al gestor (compres).
  5. Ha de poder tenir un registre històric dels productes i comandes.
    1. Les modificacions de preu i/o proveïdor ha de resultar en un producte nou (ID), per permetre la traçabilitat de les comandes històriques.
  6. El sistema generarà un informe per proveïdor amb la comanda que el pertoca (agrupada per productes).
    1. Es realitzarà un cop es tanca el període de comanda (dia de tancament).
    2. S'enviarà per email un informe per cada proveïdor interessat.
      1. El gestor haurà de validar la comanda abans de ser enviada (o automatitzar-la, si es vol).
    3. El gestor pot activar o desactivar l'enviament a cada productor.
  7. El sistema generarà un informe per producte per poder realitzar el torn de caixes (rebuda de producte i repartiment per caixes dels socis).
  8. Els informes han de poder descarregar-se de forma imprimible (PDF).
  9. Avisos: el sistema avisarà automàticament per email en cas de:
    1. Producte amb stock <0 (permetrà demanar-ho als clients però els apareixerà en vermell).
    2. Generació d'informes automàtica. Després del tancament de comanda, el sistema efectuarà els informes automàticament i els enviarà per correu als gestors implicats. Això permetrà tenir una còpia de seguretat imprimible per si falla el sistema. Els gestors podran controlar el sistema en cas que els informes automàtics no s'enviïn.
  10. Vista d'inventari: permetrà actualitzar el control dels stocks des d'una única interfície.
  11. ...

Especificacions comunes[modifica]

  1. Visualització responsive per dispositius estàndard i mòbils (PC, smartphone, tablet).
    1. Especialment per la "entrega de client" on els socis podran calcular el preu final a pagar a caixa des del seu telèfon mòbil.
  2. Disseny i usabilitat...
  3. S'ha de preveure un sistema de contingència per si falla internet, el servidor, etc. (recuperació d'informes en PDF imprimibles en un backup o enviats automàticament per correu, etc.).
  4. ...



Especificacions no-funcionals[modifica]

L'aplicació es realitzarà:

  • En llenguatge Python.
  • Sobre la plataforma de desplegament de Google App Engine (GAE).
    • És la opció més econòmica (gratuïta per nombre de visites baix).
    • Facilita autenticació mitjançant comptes Google, disponibles per una majoria dels socis.
    • En contra té la consideració "responsable" en utilitzar un servidor que pot conèixer informació sobre nosaltres i que és conegut que s'empra per fins comercials i com a subministrador d'informació als estats on està implantat.
  • Amb el framework Pyramid.
    • Portabilitat: ens permetria treballar amb GAE o migrar-ho a altres sistemes si fos necessari (servidor dedicat).
    • Robustesa
    • Escalabilitat (en principi no ens és necessària).