Especificacions: cooperativa de consum
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ó.
Contingut
El client: Què és una cooperativa de consum?
El nostre client, la cooperativa "La Pera" es dedica a autogestionar la compra de productes que han de complir amb diversos requisits:
- 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ó
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).
- Gestor dels productes (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.
Ambdós 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).
Especificacions funcionals
- Especificacions per als clients:
- 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.
- Cada comanda ha de mostrar diverses entrades.
- Cada entrada tindrà un producte (IDproducte) i la quantatitat (que depenent del producte seran per kg, manats, unitats, etc.).
- 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.
- Per defecte apareixerà l'entrega per la setmana següent.
- El desplegable mostrarà com a opcions les properes 4 setmanes.
- Ha de tenir la opció d'afegir productes en stock (no sota comanda) però han de figurar en una categoria a part.
- 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).
- El client finalment validarà i blocarà la seva comanda.
- 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).
- 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).
- El client rebrà un email de notificació de la comanda efectuada amb la relació de productes i el cost estimat desglossat.
- Cada client només pot fer una comanda per setmana (* a revisar).
- El dia d'entrega de comanda el client podrà obrir una entrega de client.
- Aquesta entrega serà una còpia de la seva comanda, on podrà efectuar modificacions segons el què hagi rebut efectivament.
- L'entrega calcularà el preu dels productes comprats finalment per poder pagar a caixa.
- ...
- Especificacions per als gestors:
- 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.).
- S'intentarà evitar manteniment d'usuaris i contrasenyes mitjançant sistemes d'autenticació oberts.
- 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).
- Ha de triar el dia i hora de tancament a partir del qual les comandes no es poden modificar.
- Inicialment serà divendres migdia per poder notificar els proveïdors abans del cap de setmana.
- Control de productes:
- Hi ha 2 tipus: productes sota comanda i productes en stock.
- Les comandes dels diferents tipus de producte (comanda, stock) han de ser clarament diferenciades.
- Ha de poder donar d'alta nous productes, que tindran els atributs preu, proveïdor, indicador comanda/stock, stock, disponible.
- El camp stock serà ignorat si és sota comanda.
- "Disponible" permetrà controlar si es mostra o no als clients.
- Ha de poder actualitzar el valor del stock.
- 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).
- Ha de poder tenir un registre històric dels productes i comandes.
- 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.
- El sistema generarà un informe per proveïdor amb la comanda que el pertoca (agrupada per productes).
- Es realitzarà un cop es tanca el període de comanda (dia de tancament).
- S'enviarà per email un informe per cada proveïdor interessat.
- El gestor haurà de validar la comanda abans de ser enviada (o automatitzar-la, si es vol).
- El gestor pot activar o desactivar l'enviament a cada productor.
- El sistema generarà un informe per producte per poder realitzar el torn de caixes (rebuda de producte i repartiment per caixes dels socis).
- Els informes han de poder descarregar-se de forma imprimible (PDF).
- Avisos: el sistema avisarà automàticament per email en cas de:
- Producte amb stock <0 (permetrà demanar-ho als clients però els apareixerà en vermell).
- 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.
- Vista d'inventari: permetrà actualitzar el control dels stocks des d'una única interfície.
- ...
- 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.).
- Especificacions comunes:
- Visualització responsive per dispositius estàndard i mòbils (PC, smartphone, tablet).
- 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.
- Disseny i usabilitat...
- 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.).
- ...
- Visualització responsive per dispositius estàndard i mòbils (PC, smartphone, tablet).
Especificacions no-funcionals
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).
- 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).