GDXPTodo

madbob edited this page Dec 20, 2014 · 4 revisions

Bozza per il formato GDXP (GAS Data Exchange Protocol) versione 1.0.

Questa pagina e' destinata ad esporre il materiale temporaneamente durante la discussione pubblica, una volta finalizzato qualcosa sara' da spostare in maniera permanente da qualche altra parte.

L'appello per la revisione di questo protocollo e' stato inviato alla mailing list CyberSocial il 13 agosto 2011, qui di seguito il testo integrale.

Fin dalla mia prima apparizione su questa mailing list iniziai a blaterare di un formato condiviso per l'esportazione e l'importazione dei dati da un gestionale GAS all'altro, qualcosa che permettesse interoperabilita' tra le diverse piattaforme e, conseguentemente, rendesse un po' piu' facile la vita ai nostri utenti. Finalmente, e' venuto il giorno di parlarne un poco piu' concretamente.

Qui -> http://trac.gasdotto.net/wiki/GDXPTodo ho piazzato temporaneamente la bozza del DTD per la versione 1.0 di quello che abbiamo chiamato GDXP, ovvero "GAS Data Exchange Protocol" (anche il nome puo' essere oggetto di revisione, ovviamente), affinche' tutti gli interessati possano muovere i propri commenti e le proprie correzioni.

Al momento gli intenti del formato sono limitati ai casi d'uso piu' comuni: esportazione ed importazione del listino di un fornitore (cosa che credo sia successo a tutti di sentirsi chiedere), ed esportazione ed importazione di un ordine aperto (per permettere la condivisione di uno stesso ordine tra piu' GAS). La differenza tra un utilizzo e l'altro sta solo nella presenza del nodo "orders" in coda al file: se c'e' si sta parlando di un ordine in cui sono compresi i prodotti elencati sopra, se non c'e' si sta parlando di un semplice listino.

Certamente la struttura proposta non e' la migliore possibile, ma ho insistito con colui che ne ha curato la definizione per sopprimere ogni pippa ed ogni possibile margine di ambiguita' apposta perche' il formato sia rapidamente e facilmente implementabile da chiunque senza sclero. Per ogni elemento descritto sono contemplati gli attributi piu' comuni (a parte un paio di eccezioni che francamente non so perche' siano state introdotte all'ultimo momento...): se ci sono cose che non supportate, o cose che supportate ma non sono previste, fatecelo sapere. Il piu' e' evitare di avere millemila attributi che supporta una singola piattaforma, ma attenerci ad un minimo comun denominatore condiviso tra tutti; se poi qualcuno vuole gestirsi i suoi propri attributi puo' usare la sezione "extraFields" appositamente introdotta per permettere l'estensione ed una sommaria personalizzazione del formato.

Sarebbe ottimo raggiungere un consenso entro meta' settembre, affinche' la release 1.0 sia finalizzata per permettere a tutti l'implementazione giusto in tempo per il rientro dalle ferie dei GAS. Se ci sara' interesse si potranno reiterare altre revisioni su una base temporale predefinita (ogni sei o dodici mesi): intanto vediamo in quanti aderiscono.

Per commenti, osservazioni, domande, critiche e richieste, rispondete qui in mailing list pubblica.

Bozza 0.3

<?xml version="1.0" encoding="UTF-8"?>
<!--
	Gas Data eXchange Protocol
-->
<!--
	Tag: gdxp
	Descrizione: root
	Attributi:
		- protocolVersion: versione del protocollo
		- creationDate: timestamp di creazione del file con precisione fino al secondo con formato YYYYMMDDHHmmss
		- applicationSignature: firma dell'applicazione che ha creato il file
	Figli: supplier
-->
<!ELEMENT gdxp supplier*>
	<!ATTLIST gdxp protocolVersion CDATA #REQUIRED>
	<!ATTLIST gdxp creationDate CDATA #REQUIRED>
	<!ATTLIST gdxp applicationSignature CDATA #REQUIRED>
	
	<!--
		Tag: supplier
		Descrizione: contiene i dati di anagrafica, prodotti/listini e
		ordini aperti per il singolo fornitore
		Figli: taxCode, vatNumber, name, address, contacts, note?, products, orders, extraFields
	-->
	<!ELEMENT supplier (taxCode, vatNumber, name, address, contacts, note?, products, orders, extraFields?)>
		<!--
			Tag: taxCode
			Descrizione: Codice fiscale
		-->
		<!ELEMENT taxCode (#CDATA)>

		<!--
			Tag: vatNumber
			Descrizione: Partita IVA
		-->
		<!ELEMENT vatNumber (#CDATA)>
		
		<!--
			Tag: name
			Descrizione: Nome/Ragione sociale del fornitore 
		-->
		<!ELEMENT name (#CDATA)>
		
		<!--
			Tag: address
			Descrizione: indirizzo del fornitore
			Figli: street, locality, zipCode, country
		-->
		<!ELEMENT address (street, locality, zipCode, country)>
			<!--
				Tag: street
				Descrizione: via e numero civico
			-->
			<!ELEMENT street (#CDATA)>

			<!--
				Tag: locality
				Descrizione: località/paese/città
			-->
			<!ELEMENT locality (#CDATA)>

			<!--
				Tag: zipCode
				Descrizione: codice postale
			-->
			<!ELEMENT zipCode (#CDATA)>

			<!--
				Tag: country
				Descrizione: nazione
			-->
			<!ELEMENT country (#CDATA)>
			
		<!--
			Tag: contacts
			Descrizione: contiene la lista dei contatti per quel fornitore
			Figli: contact
		-->
		<!ELEMENT contacts (contact*)>
		
			<!--
				Tag: contact 
				Descrizione: contatto/riferimento del fornitore
				Figli: primary, extraContact
			-->
			<!ELEMENT contact (primary, extraContact*)>
			
			<!--
				Tag: primary
				Descrizione: contatto principale direttamente legato alla
				ragione sociale del fornitore
				Figli: phoneNumber, faxNumber, emailAddress, webSite
			-->
			<!ELEMENT primary (phoneNumber, faxNumber?, emailAddress, webSite?)>
				<!--
					Tag: phoneNumber
					Descrizione: numero telefonico
				-->
				<!ELEMENT phoneNumber (#CDATA)>

				<!--
					Tag: faxNumber
					Descrizione: numero di fax
				-->
				<!ELEMENT faxNumber (#CDATA)>

				<!--
					Tag: emailAddress
					Descrizione: indirizzo di posta elettronica
				-->
				<!ELEMENT emailAddress (#CDATA)>

				<!--
					Tag: webSite
					Descrizione: indirizzo del sito web
				-->
				<!ELEMENT webSite (#CDATA)>

			<!--
				Tag: extraContact
				Descrizione: contatto per un riferimento del fornitore
				Figli: firstName, lastName, phoneNumber, mobileNumber, faxNumber, emailAddress
			-->
			<!ELEMENT extraContact (firstName, lastName, phoneNumber, mobileNumber, faxNumber?, emailAddress)>
				<!--
					Tag: firstName
					Descrizione: nome
				-->
				<!ELEMENT firstName (#CDATA)>

				<!--
					Tag: lastName
					Descrizione: cognome
				-->
				<!ELEMENT lastName (#CDATA)>

				<!--
					Tag: phoneNumber
					Descrizione: numero del telefono fisso
				-->
				<!ELEMENT phoneNumber (#CDATA)>

				<!--
					Tag: mobileNumber
					Descrizione: numero del telefono cellulare
				-->
				<!ELEMENT mobileNumber (#CDATA)>

				<!--
					Tag: faxNumber
					Descrizione: numero di fax
				-->
				<!ELEMENT faxNumber (#CDATA)>

				<!--
					Tag: emailAddress
					Descrizione: indirizzo di posta elettronica
				-->
				<!ELEMENT emailAddress (#CDATA)>

		<!--
			Tag: note
			Descrizione: Commenti e note (testo libero) relative al fornitore
		-->
		<!ELEMENT note (#CDATA)>
		
		<!--
			Tag: products
			Descrizione: lista dei prodotti/listino del fornitore
			Figli: product
		-->
		<!ELEMENT products (product*)>
		
			<!--
				Tag: product
				Descrizione: singolo prodotto
				Figli: sku, name, category, um, description, orderInfo, variants, extraFields
			-->
			<!ELEMENT product (sku?, name, category, um, description, orderInfo, variants?, extraFields?)>
				<!--
					Tag: sku
					Descrizione: codice prodotto del fornitore
				-->
				<!ELEMENT sku (#CDATA)>

				<!--
					Tag: name
					Descrizione: descrizione del prodotto
				-->
				<!ELEMENT name (#CDATA)>

				<!--
					Tag: category
					Descrizione: categoria di cui fa parte il prodotto
				-->
				<!ELEMENT category (#CDATA)>

				<!--
					Tag: um
					Descrizione: unità di misura
				-->
				<!ELEMENT um (#CDATA)>
				
				<!--
					Tag: description
					Descrizione: descrizione estesa del prodotto
				-->
				<!ELEMENT description (#CDATA)>
				
				<!--
					Tag: orderInfo
					Descrizione: informazioni relative al prodotto relative agli ordini
					Figli: packageQty, minQty, mulQty, maxQty, umPrice, shippingCost
				-->		
				<!ELEMENT orderInfo (packageQty?, minQty?, mulQty?, maxQty?, umPrice, shippingCost?)>
					<!--
						Tag: packageQty
						Descrizione: quantità per confezione
					-->
					<!ELEMENT packageQty (#CDATA)>

					<!--
						Tag: minQty
						Descrizione: quantità minima ordinabile
					-->
					<!ELEMENT minQty (#CDATA)>

					<!--
						Tag: mulQty
						Descrizione: quantità multipla di ordine
					-->
					<!ELEMENT mulQty (#CDATA)>

					<!--
						Tag: maxQty
						Descrizione: quantità massima totale ordinabile
					-->
					<!ELEMENT maxQty (#CDATA)>

					<!--
						Tag: umPrice
						Descrizione: prezzo per unità di misura
					-->
					<!ELEMENT umPrice (#CDATA)>

					<!--
						Tag: shippingCost
						Descrizione: costo di trasporto per unità di misura
					-->
					<!ELEMENT shippingCost (#CDATA)>

				<!--
					Tag: variants
					Descrizione: lista delle varianti
					Figli: variant
				-->
				<!ELEMENT variants (variant)>

					<!--
						Tag: variant
						Descrizione: rapprensenta la singola variante per il prodorro
						Attributi:
						 - name: nome della variante
						Figli: value
					-->
					<!ELEMENT variant (value+)>
						<!ATTLIST variant name CDATA #REQUIRED>

						<!--
							Tag: value
							Descrizione: singolo valore che può assumere la variante
						-->
						<!ELEMENT value (#CDATA)>

				<!--
					Tag: extraFields
					Descrizione: lista dei campi non direttamente previsti dal protocollo
					Figli: extraField
				-->		
				<!ELEMENT extraFields (extraField)>

					<!--
						Tag: extraField
						Descrizione: campo non previsto dal protocollo
						Attributi:
						 - name: il nome del campo
					-->
					<!ELEMENT extraField (#CDATA)>
						<!ATTLIST extraField name CDATA #REQUIRED>

		<!--
			Tag: orders
			Descrizione: lista degli ordini
			Figli: order
		-->
		<!ELEMENT orders (order*)>

			<!--
				Tag: order
				Descrizione: dati relativi al singolo ordine
				Figli: openDate, closeDate, deliveryDate, extraFields
			-->
			<!ELEMENT order (openDate, closeDate, deliveryDate?, extraFields?)>
				<!--
					Tag: openDate
					Descrizione: data di apertura dell'ordine
				-->
				<!ELEMENT openDate (#CDATA)>

				<!--
					Tag: closeDate
					Descrizione: data di chiusura dell'ordine
				-->
				<!ELEMENT closeDate (#CDATA)>

				<!--
					Tag: deliveryDate
					Descrizione: data prevista di consegna
				-->
				<!ELEMENT deliveryDate (#CDATA)>

				<!--
					Tag: extraFields
					Descrizione: lista dei campi non direttamente previsti dal protocollo
					Figli: extraField
				-->		
				<!ELEMENT extraFields (extraField)>
				
					<!--
						Tag: extraField
						Descrizione: campo non previsto dal protocollo
						Attributi:
						 - name: il nome del campo
					-->
					<!ELEMENT extraField (#CDATA)>
						<!ATTLIST extraField name CDATA #REQUIRED>

		<!--
			Tag: extraFields
			Descrizione: lista dei campi non direttamente previsti dal protocollo
			Figli: extraField
		-->
		<!ELEMENT extraFields (extraField)>

			<!--
				Tag: extraField
				Descrizione: campo non previsto dal protocollo
				Attributi:
				 - name: il nome del campo
			-->
			<!ELEMENT extraField (#CDATA)>
				<!ATTLIST extraField name CDATA #REQUIRED>

Changelog

  • 0.3

    • campo "note" opzionale
  • 0.2

    • gran parte degli attributi sono stati mutati in elementi
    • soppressi i campi packagePrice e discounts
    • resi facoltativi i campi faxNumber, webSite, sku, packageQty, minQty, mulQty, maxQty, shippingCost, deliveryDate
  • 0.1.1

    • aggiunto elemento "extraField" sia in "supplier" che in "order"
    • rinominato "accountancyVATNumber" in "vatNumber"
  • 0.1

    • versione iniziale

Punti Aperti

  • per i prodotti

    • introdurre l'attributo "pezzatura"
    • introdurre l'attributo "sovraprezzo"
    • introdurre l'attributo "prezzo variabile" (per i prodotti a peso)
    • introdurre l'attributo "dimensione confezione"
  • per gli ordini

    • permettere di inserire piu' ordini per uno stesso fornitore all'interno dello stesso file