Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Відстеження подач

Відстежуйте подачі, керуйте узгодженнями та генеруйте звіти про статус.

Огляд робочого процесу

Життєвий цикл подачі
Створено
→
Подано
→
На розгляді
→
Узгоджено/Відхилено
→
Закрито
Відстеження
Список подач
Фільтрація за статусом
Контроль термінів
Звітність
Журнал подач
Зведення статусів
Звіт по простроченим

Підхід через CLI

Перелік усіх подач

PROJECT_ID="b.project-id"

# List all submittals
raps acc submittal list "$PROJECT_ID"

# Export to JSON
raps acc submittal list "$PROJECT_ID" --output json > submittals.json

Фільтрація за статусом

# Get open submittals
cat submittals.json | jq '[.[] | select(.status == "open")]' > open-submittals.json

# Get pending review
cat submittals.json | jq '[.[] | select(.status == "under_review")]' > pending-review.json

# Get approved
cat submittals.json | jq '[.[] | select(.status == "approved")]' > approved.json

Експорт журналу подач

cat submittals.json | jq -r '
  ["Number", "Title", "Spec Section", "Status", "Submitted", "Required", "Approved"],
  (.[] | [
    .number,
    .title,
    .specSection,
    .status,
    .submittedDate,
    .requiredDate,
    .approvedDate // ""
  ]) | @csv
' > submittal-log.csv

Пошук прострочених подач

TODAY=$(date +%Y-%m-%d)

cat submittals.json | jq --arg today "$TODAY" '
  [.[] | select(.status != "approved" and .requiredDate != null and .requiredDate < $today)]
' > late-submittals.json

echo "Late submittals: $(jq 'length' late-submittals.json)"

# Detail report
jq -r '.[] | "- \(.number): \(.title) (Due: \(.requiredDate))"' late-submittals.json

Зведення статусів

cat submittals.json | jq '
  group_by(.status) |
  map({status: .[0].status, count: length}) |
  sort_by(-.count)'

CI/CD-конвеєр

# .github/workflows/submittal-tracking.yml
name: Submittal Tracking Report

on:
  schedule:
    - cron: '0 7 * * 1-5'  # Weekdays at 7 AM
  workflow_dispatch:

env:
  PROJECT_ID: ${{ secrets.ACC_PROJECT_ID }}

jobs:
  submittal-report:
    runs-on: ubuntu-latest
    steps:
      - name: Install RAPS
        run: cargo install raps

      - name: Authenticate
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
          APS_ACCESS_TOKEN: ${{ secrets.APS_ACCESS_TOKEN }}
          APS_REFRESH_TOKEN: ${{ secrets.APS_REFRESH_TOKEN }}
        run: raps auth login --token "$APS_ACCESS_TOKEN" --refresh-token "$APS_REFRESH_TOKEN" --non-interactive

      - name: Export submittals
        env:
          APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
          APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
        run: |
          raps acc submittal list "$PROJECT_ID" --output json > submittals.json

      - name: Generate report
        run: |
          TODAY=$(date +%Y-%m-%d)

          echo "# Submittal Status Report" > report.md
          echo "Generated: $(date)" >> report.md
          echo "" >> report.md

          # Summary
          TOTAL=$(jq 'length' submittals.json)
          OPEN=$(jq '[.[] | select(.status == "open")] | length' submittals.json)
          REVIEW=$(jq '[.[] | select(.status == "under_review")] | length' submittals.json)
          APPROVED=$(jq '[.[] | select(.status == "approved")] | length' submittals.json)
          LATE=$(jq --arg today "$TODAY" '[.[] | select(.status != "approved" and .requiredDate < $today)] | length' submittals.json)

          echo "## Summary" >> report.md
          echo "| Status | Count |" >> report.md
          echo "|--------|-------|" >> report.md
          echo "| Total | $TOTAL |" >> report.md
          echo "| Open | $OPEN |" >> report.md
          echo "| Under Review | $REVIEW |" >> report.md
          echo "| Approved | $APPROVED |" >> report.md
          echo "| **Late** | **$LATE** |" >> report.md
          echo "" >> report.md

          # Late submittals
          if [ "$LATE" -gt 0 ]; then
            echo "## Late Submittals" >> report.md
            echo "| Number | Title | Required | Days Late |" >> report.md
            echo "|--------|-------|----------|-----------|" >> report.md

            jq --arg today "$TODAY" -r '
              .[] |
              select(.status != "approved" and .requiredDate != null and .requiredDate < $today) |
              "| \(.number) | \(.title) | \(.requiredDate) | - |"
            ' submittals.json >> report.md
          fi

      - name: Export CSV
        run: |
          jq -r '
            ["Number","Title","Spec","Status","Required","Submitted"],
            (.[] | [.number, .title, .specSection, .status, .requiredDate, .submittedDate])
            | @csv
          ' submittals.json > submittal-log.csv

      - name: Upload reports
        uses: actions/upload-artifact@v4
        with:
          name: submittal-reports
          path: |
            report.md
            submittal-log.csv

Потік конвеєра

Щоденний звіт
7:00 будні
Експорт
Отримання подач
Розрахунок метрик
Звіти
report.md
submittal-log.csv

Інтеграція з MCP

Отримання статусу подач

User: "What's the status of our submittals?"
КористувачAI-асистентRAPS MCPACC Cloud
Корист.Статус подачAI
AIaps_acc_submittal_list(project_id)MCP
MCPОтримання подачACC
ACCСписок подачMCP
AI: Групування за статусом + Пошук прострочених
AIЗведення статусуКорист.

Відповідь AI:

Зведення статусу подач:

СтатусКількість%
Узгоджено4560%
На розгляді1216%
Відкриті1520%
Відхилено34%

Потребують уваги:

  • 4 подачі прострочені
  • 3 відхилені подачі потребують повторного подання

Найближчі (наступні 7 днів):

  • SUB-089: Робочі креслення металоконструкцій (Термін: 18 лют)
  • SUB-092: Обладнання HVAC (Термін: 20 лют)

Пошук прострочених подач

User: "Show me all late submittals"

Відповідь AI:

Прострочені подачі (4):

НомерНазваСпецифікаціяТермінДнів прострочено
SUB-045Дверна фурнітура08 71 0010 лют5
SUB-052Покрівельні матеріали07 50 0012 лют3
SUB-061Світильники26 51 0013 лют2
SUB-063Сантехнічне обладнання22 40 0014 лют1

Бажаєте, щоб я надіслав нагадування відповідальним?


Розширені звіти

За розділами специфікації

cat submittals.json | jq '
  group_by(.specSection) |
  map({
    section: .[0].specSection,
    total: length,
    approved: [.[] | select(.status == "approved")] | length,
    pending: [.[] | select(.status != "approved")] | length
  }) |
  sort_by(.section)'

Аналіз часу обробки

cat submittals.json | jq '
  [.[] | select(.submittedDate != null and .approvedDate != null) |
   {
     number: .number,
     submitted: .submittedDate,
     approved: .approvedDate
   }]'
# Note: Calculate days between dates with additional processing

Динаміка узгоджень по місяцях

cat submittals.json | jq '
  [.[] | select(.approvedDate != null)] |
  group_by(.approvedDate[:7]) |
  map({month: .[0].approvedDate[:7], approved: length})'

Пов’язане