📄Work Record Smart Contract

Este contrato almacena todos los Servicios o Trabajos de una experiencia freelance del usuario.

Estructura

struct WorkRecord {
    uint256 workRecordId;
    uint256 experienceId;
    address user;
    string consumer;
    address consumerAddress;
    address platformAddress;
    string title;
    string description;
    string[] tags;
    uint256 startDate;
    uint256 endDate;
    string status;
    uint256 price;
    uint256 hoursWorked;
    uint16 calification;
    bool consumerValidation;
    string consumerComments;
    Skill[] skills;
    string moreInfoLinks;
}
struct Skill {
    string skill;
    uint8 level;    
}

Ejemplo

{
  "workRecordId": 1,
  "experienceId": 1,
  "user": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
  "consumer": "",
  "consumerAddress": "0xea83c649dd49a6ec44c9e2943eb673a8fbb7bab6",
  "platformAddress": "0xaa9d8b1f9a2f9b0f9b2b0f9b0f9b0f9b0f9b0f9b",
  "title": "Web App",
  "description": "Web App for General Store",
  "tags": [
    "web",
    "app"
  ],
  "startDate": 1704078000,
  "endDate": 1717124400,
  "status": "Complete",
  "price": 12345,
  "hoursWorked": 100,
  "calification": 430,
  "consumerValidation": true,
  "consumerComments": "Great job!",
  "skills": [
    {
      "skill": "e-commerce",
      "level": 7
    },
    {
      "skill": "French",
      "level": 5
    }
  ],
  "moreInfoLink": "ipfs://ipfs.io/XXXXXXX"  
}

Campos semánticos

  • workRecordId: Identificador del Registro de Trabajo (Work Record). Este valor es asignado correlativamente por el Smart Contract.

  • experienceId: Identificador de la Experiencia asociada. La Experiencia debe ser freelance.

  • user: Dirección del usuario. Propietario del registro.

  • consumer: Nombre del consumidor del servicio. Es solo descriptivo; este Registro de Trabajo no puede ser verificado si se utiliza este campo. Debe estar vacío si se proporciona una dirección del Consumidor.

  • consumerAddress: Dirección del consumidor del servicio. Debe ser proporcionada por el consumidor mismo. El propietario de esta dirección puede verificar el Work Record (Registro de Trabajo). Puede estar vacío si el consumidor no tiene una dirección (se utiliza el campo consumer en su lugar).

  • platformAddress: Dirección de la plataforma que media en el servicio. Debe ser proporcionada por la plataforma misma. Si el servicio se realiza utilizando una plataforma como Upwork o Fiverr, es poco probable que el consumidor pueda validar este servicio. En este caso, es la plataforma misma la que lo valida.

  • title: Título del servicio. description: Describe el servicio/trabajo con más detalles.

  • tags: Palabras clave que coinciden con este servicio. Son solo descriptivas. Se utilizarán para buscar y clasificar los servicios.

  • startDate: Fecha en que comenzó el Registro de Trabajo. Almacenar como Timestamp Unix (segundos desde el 01-01-1970). Campo obligatorio. Debe ser mayor que startDate de la Experiencia.

  • endDate: Fecha en que terminó el Registro de Trabajo. Almacenar como Timestamp Unix (segundos desde el 01-01-1970). Puede ser 0 si el Registro de Trabajo aún no ha terminado. Debe ser mayor que startDate.

  • status: Estado actual del Registro de Trabajo (Pendiente - Completado - Cancelado).

  • price: Monto cobrado en USD. Almacenar en centavos (1 USD = 100).

  • hoursWorked: Cantidad de horas utilizadas para completar el servicio.

  • calification: Calificación del consumidor para el servicio. Almacenar en puntos base (1 = 100). Debe estar entre 0 y 500 (0 - 5). Debe ser proporcionado solo cuando se proporciona endDate.

  • consumerValidation: Si se proporciona un consumerAddress, el propietario de esta dirección puede validar el Registro de Trabajo.

  • consumerComments: Comentarios del consumidor sobre el servicio. Debe ser proporcionado solo cuando se proporciona endDate.

  • skills: Habilidades usadas en este Registro de Trabajo.

  • moreInfoLink: Enlace a una metadata opcional. Tipicamente este enlace apuntará a un JSON con diferentes campos para cualquier tipo de metadata (fotos, videos, campos informativos, etc)

Funciones

addWorkRecord: Agrega un nuevo Work Record (Registro de trabajo/servicio).

updateWorkRecord: Actualiza un existente Work Record.

endWorkRecord: Finaliza un existente Work Record.

deleteWorkRecord: Elimina un existente Work Record.

updateWorkRecordValidation: Valida un existente Work Record.

cancelWorkRecord: Cancela un existente Work Record.

Reglas de validación

Existen varias reglas que un Work Record debe seguir para garantizar un estado consistente. Esto se aplica a las operaciones addWorkRecord, updateWorkRecord y endWorkRecord:

  • La dirección del usuario (user) debe coincidir con la dirección del usuario de la Experiencia.

  • La Experiencia debe ser freelance.

  • Debe especificarse un nombre de consumidor (consumer) o una dirección (consumerAddress) de consumidor (uno u otro, no ambos).

  • La dirección del usuario (user) debe ser diferente de la dirección del consumidor (consumerAddress) y de la dirección de la plataforma (platformAddress).

  • El título (title) no debe estar vacío.

  • La descripción (description) no debe estar vacía.

  • StartDate no debe estar vacío.

  • Las fechas del Work Record deben estar dentro de las fechas de la Experiencia.

  • EndDate debe ser mayor que startDate.

  • La Calificación (calification) no debe ser mayor que 500.

Last updated