def get_doc_list_data()

in microservices/hitl_service/src/routes/hitl.py [0:0]


def get_doc_list_data(docs_list: list):
  for doc in docs_list:
    name = "N/A"
    if doc["entities"]:
      for entity in doc["entities"]:
        if entity["entity"] == "name":
          if entity["corrected_value"]:
            name = entity["corrected_value"]
          elif entity["value"]:
            name = entity["value"]
    doc["applicant_name"] = name

    process_stage = "-"
    current_status = "-"
    status_last_updated_by = "-"
    last_status = None
    last_update_timestamp = None
    last_system_status = ""

    all_status_list = (doc.get("hitl_status", []) or []) + (
        doc.get("system_status", []) or [])
    audit_trail = sorted(all_status_list, key=lambda d: d["timestamp"])
    if audit_trail and len(audit_trail) > 0:
      last_status = audit_trail[-1]
      last_update_timestamp = last_status["timestamp"]
      status_last_updated_by = last_status.get("last_status", "System")

    system_status = doc.get("system_status", None)
    if system_status:
      last_system_status = system_status[-1]
      process_stage = (last_system_status["stage"]).lower()

    hitl_status = doc.get("hitl_status", None)
    last_hitl_status = hitl_status[-1] if hitl_status else None

    if doc["system_status"]:
      system_status = doc["system_status"]
      last_system_status = system_status[-1]
      status_last_updated_by = "System"

      # If there's HITL status, use the latest HITL status.
      if doc["hitl_status"]:
        last_hitl_status = doc["hitl_status"][-1]

        if last_system_status["timestamp"] > last_hitl_status["timestamp"]:
          if last_system_status["stage"] == "auto_approval":
            if last_system_status["status"] == STATUS_SUCCESS:
              current_status = doc["auto_approval"].title()
            else:
              current_status = STATUS_IN_PROGRESS
          elif last_system_status["status"] == STATUS_SUCCESS:
            current_status = STATUS_IN_PROGRESS
          else:
            current_status = STATUS_ERROR
        else:
          if last_hitl_status["status"] == "reassigned":
            current_status = STATUS_IN_PROGRESS
          else:
            current_status = last_hitl_status["status"].title()
            status_last_updated_by = last_hitl_status["user"]
            last_update_timestamp = last_hitl_status["timestamp"]

      # Otherwise, check the last system status.
      else:
        if last_system_status["stage"] == "auto_approval":
          if last_system_status["status"] == STATUS_SUCCESS:
            current_status = doc["auto_approval"].title()
          else:
            current_status = STATUS_REVIEW

        elif last_system_status["status"] == STATUS_SUCCESS:
          current_status = STATUS_IN_PROGRESS
        else:
          current_status = STATUS_ERROR

    # Show next stage process status.
    if current_status == STATUS_IN_PROGRESS and process_stage in PROCESS_NEXT_STAGE:
      process_stage = PROCESS_NEXT_STAGE[process_stage.lower()] + "..."

    # Update process detail status
    if current_status == STATUS_IN_PROGRESS:
      time_difference = datetime.datetime.now() - last_update_timestamp.replace(
          tzinfo=None)
      if time_difference.seconds > PROCESS_TIMEOUT_SECONDS:
        process_stage = last_system_status["stage"] + " " + STATUS_TIMEOUT
        current_status = STATUS_ERROR

    else:
      process_stage = process_stage + " " + last_system_status["status"]

    doc["process_status"] = process_stage.title()
    doc["current_status"] = current_status
    doc["status_last_updated_by"] = status_last_updated_by
    doc["last_update_timestamp"] = last_update_timestamp
    doc["audit_trail"] = audit_trail

  return docs_list