Відстеження подач
Відстежуйте подачі, керуйте узгодженнями та генеруйте звіти про статус.
Огляд робочого процесу
Життєвий цикл подачі
Створено
→Подано
→На розгляді
→Узгоджено/Відхилено
→Закрито
Відстеження
Список подач
Фільтрація за статусом
Контроль термінів
Звітність
Журнал подач
Зведення статусів
Звіт по простроченим
Підхід через 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:
Зведення статусу подач:
Статус Кількість % Узгоджено 45 60% На розгляді 12 16% Відкриті 15 20% Відхилено 3 4% Потребують уваги:
- 4 подачі прострочені
- 3 відхилені подачі потребують повторного подання
Найближчі (наступні 7 днів):
- SUB-089: Робочі креслення металоконструкцій (Термін: 18 лют)
- SUB-092: Обладнання HVAC (Термін: 20 лют)
Пошук прострочених подач
User: "Show me all late submittals"
Відповідь AI:
Прострочені подачі (4):
Номер Назва Специфікація Термін Днів прострочено SUB-045 Дверна фурнітура 08 71 00 10 лют 5 SUB-052 Покрівельні матеріали 07 50 00 12 лют 3 SUB-061 Світильники 26 51 00 13 лют 2 SUB-063 Сантехнічне обладнання 22 40 00 14 лют 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})'