Acumular horas trabajadas en un mes en diferentes dias

Estoy tratando de recolectar las horas trabajadas en diferentes dias del mes para luego sumar todas las horas y mostrarlas, tengo 3 campos:

Fecha_dia: date-time
horas_trabajada: integer
total_horas: hidden value

He realizado el calculo de esta forma en el campo hiden value:
sum(#form/data/horas_trabajadas[date(#form/data/fecha_dia) = month(today())])

Pero al correr para probarlo siempre manda este error:
Calculation Error: Error in calculation for /data/total_horas cannot handle function 'month' sera me pueden ayudar a ver cual es el error.

https://confluence.dimagi.com/display/commcarepublic/CommCare+Functions#CommCareFunctions-format-date

format-date is the function you should use i think

Soy de acuerdo que format-date es muy útil por estas cosas.

Es que hay una forma por cualquier dia trabajada y quieres recordar la total hasta hoy para el mes para salvar a la "user case"? O es que hay una "repeat group" con cada dia trabajada y necesitas sumarlas? Se puede añadir un ejemplo?

He cambiado al uso de format-date pero igual me sigue dando un error en el calculo:

  • Calculation Error: Error in calculation for /data/total_horas uses an invalid reference inside a sum function

Dejo una imagen de como tengo el form:

La idea es que me pida la fecha, luego ingrese las horas trabajadas cuando llegue al final del mes o cuando lo necesite me de el total sumando cada día que se ingreso las horas.

Entiendo la problema - sum funciona solo con una "repeat group". Aquí tiene solo un numero para sumar, entonces no funciona.

Necesita salvar las horas de trabajo por el mes hasta hoy al case que representa la trabajador, y añadir eso con las horas del form. Por ejemplo, imagino que tienes un case type con 3 campos:

Trabajador

  • nombre
  • horas_trabajada_este_mes
  • mes_actual (para saber quando reiniciar las horas)

En este form, necesitas calculos como:

mes_actual = format-date(today(), "%m")
horas_trabajada_este_mes = if(form/data/mes_actual = case/mes_actual,
    form/data/horas_trabajada + case/horas_trabajada_este_mes,
    form/data/horas_trabajada)

y salva estos dos al case.

cuando dice mes_actual es un campo tipo fecha? porque si aplico la funcion format-date luego me da un error y horas _trabajada es un campo escondido para hacer el calculo?

mes_actual debe ser el resultado de format-date(today(), "%m"), tipo string. Por ejemplo, "03".

horas _trabajada es un campo escondido para hacer el calculo?

Lo siento, he usado dos campos con la misma nombre. Cambiaré mi respuesta anterior. Necesitas uno campo horas_trabajada tipo integer para recibir la respuesta del usuario, y un campo horas_trabajada_este_mes tipo escondido para hacer el calculo (y también la case necesita un campo horas_trabajada_este_mes para tener el resultado por la proxima vez)

Excelente, muchas gracias por la aclaración y he aplicado los cambios sugeridos y funcionó correctamente.